如何在后台运行shell脚本并且不输出任何内容

时间:2012-02-08 08:53:27

标签: linux scripting sh

我写了两个shell脚本a.sh和b.sh.在a.sh和b.sh中,我有一个无限的for循环,他们将一些输出打印到终端。我想编写另一个调用a.sh和b.sh的脚本,但是我希望用户立即重新获得对终端的控制,而不是让脚本无限运行,我想在终端中隐藏输出。

7 个答案:

答案 0 :(得分:190)

如果您的后台工作需要很长时间才能完成,或者您只是使用SecureCRT或类似的东西登录服务器,请使用nohup

stdout stderr 重定向到/dev/null以忽略输出。

nohup /path/to/your/script.sh > /dev/null 2>&1 &

答案 1 :(得分:28)

将输出重定向到如下文件:

./a.sh > somefile 2>&1 &

这会将stdout和stderr重定向到同一个文件。如果要将stdout和stderr重定向到两个不同的文件,请使用:

./a.sh > stdoutfile 2> stderrfile &

如果您不关心stdout和/或stderr,可以使用/dev/null作为一个或两个文件。

有关重定向的详细信息,请参阅bash manpage

答案 2 :(得分:19)

对不起,这有点晚了但找到了理想的解决方案,可以解决那些你不想要任何标准或错误输出的信号(信用额度应该到期:http://felixmilea.com/2014/12/running-bash-commands-background-properly/

这会将输出重定向到null并保持屏幕清晰:

command &>/dev/null &

答案 3 :(得分:12)

如果它们与包含以下内容的脚本位于同一目录中:

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &

最后的&是让您的脚本在后台运行的原因。

> /dev/null 2>&1部分不是必需的 - 它会重定向stdout和stderr流,因此您不必在终端上看到它们,您可能希望为具有大量输出的嘈杂脚本执行此操作。

答案 4 :(得分:1)

在子shell中运行以删除通知并关闭STDOUT和STDERR:

sort()

答案 5 :(得分:0)

这些示例可以正常工作:

nohup sh prog.sh proglog.log 2>&1&

对于循环,您可以这样使用:

对于{1..10}中的i;做sh prog.sh;睡1;完成prog.log 2>&1&

它在后台运行,不显示任何输出。

答案 6 :(得分:0)

如果要在linux kickstart中运行脚本,则必须按以下方式运行。

sh /tmp/script.sh > /dev/null 2>&1 < /dev/null &