如何在后台运行一个shell脚本,并没有输出
我写了两个shell脚本a.sh和b.sh. 在a.sh和b.sh中,我有一个无限的for循环,它们将一些输出打印到terminal。 我想编写另一个调用a.sh和b.sh的脚本,但是我希望用户立即重新获得对terminal的控制权,而不是让脚本无限运行,而我想隐藏terminal中的输出。
使用nohup
如果你的后台工作需要很长时间才能完成,或者你只是使用SecureCRT或类似的东西login服务器。
将stdout和stderrredirect到/dev/null
以忽略输出。
nohup /path/to/your/script.sh > /dev/null 2>&1 &
将输出redirect到像这样的文件:
./a.sh > somefile 2>&1 &
这将把stdout和stderrredirect到同一个文件。 如果你想把stdout和stderrredirect到两个不同的文件,使用这个:
./a.sh > stdoutfile 2> stderrfile &
如果您不关心stdout和/或stderr,则可以将/dev/null
用作一个或两个文件。
有关redirect的详细信息,请参见bash联机帮助页 。
对不起,这有点晚了,但find了一个不需要任何标准或错误输出的简单命令的理想解决scheme(信用在哪里: http : //felixmilea.com/2014/12/running-bash-commands-background / )
这将输出redirect到null并保持屏幕清晰:
command &>/dev/null &
如果它们与包含以下内容的脚本位于相同的目录中:
./a.sh > /dev/null 2>&1 & ./b.sh > /dev/null 2>&1 &
&
最后是让你的脚本在后台运行的原因。
> /dev/null 2>&1
部分不是必须的 – 它redirectstdout和stderrstream,所以你不必在terminal上看到它们,你可能想要做大量输出的嘈杂脚本。