在子shell中阻止来自被调用的bash函数的输出

时间:2014-04-29 18:24:01

标签: linux bash background null

如果我在bash中调用函数,并且该函数本身设计为使用printf将消息输出到终端,我该如何禁止该功能。请允许我进一步解释。

通常我会有一个主脚本。该脚本调用一个函数。该函数使用printf执行其正常的操作并输出到终端。

我正在尝试创建一个替代选项,您可以说,在后台运行该功能并且不输出任何内容。

通常我会考虑做以下事情:

FUNCTION & > /dev/null 2>&1

这将在后台运行正常功能并丢弃所有输出。

它似乎起初工作。通常出现的消息是空白的,主脚本完成运行。一旦回到提示,那么函数(循环用于许多不同的东西)就会完成并开始输出到提示符下方的终端。

思想?

2 个答案:

答案 0 :(得分:5)

如果您需要将该功能放在后台,& control operator需要在所有重定向规范之后在命令末尾出现:

$ function myfunc() {
> printf "%s\n" "normal message"
> printf "%s\n" "error message" 1>&2
> }
$ myfunc
normal message
error message
$ myfunc > /dev/null 2>&1 &
[2] 12081
$ 
[2]+  Done                    myfunc > /dev/null 2>&1
$ 

答案 1 :(得分:5)

正确的语法是

FUNCTION > /dev/null 2>&1 &

由于&是一个命令终止符,就像;一样,您需要在运行FUNCTION的命令中包含输出重定向,而不是以下命令。