如何在后台运行一个shell脚本,并没有输出

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

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

stdoutstderrredirect到/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上看到它们,你可能想要做大量输出的嘈杂脚本。