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