2012-02-08 216 views
67

我写了两个shell脚本a.sh和b.sh.在a.sh和b.sh中,我有一个无限循环,并且它们向终端输出一些输出。我想写另一个调用a.sh和b.sh的脚本,但我希望用户立即重新获得对终端的控制权,而不是让脚本无限运行,并且我想隐藏终端中的输出。如何在后台运行shell脚本并得不到输出

回答

139

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

重定向标准输出stderr的/dev/null忽略输出。

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

只是为了添加,有时会有脚本的参数,那么上面的命令将返回**不明确的输出重定向**。 – sabertooth1990 2013-11-06 15:00:19

+0

我发现的一个更好的方法是使用 'nohup /path/to/your/script.sh parameter1>&1&' 如果有人知道更好的方法。 – sabertooth1990 2013-11-06 15:06:46

+2

如果您使用'nohup',则不需要'/ dev/null 2>&1',因为它已经将所有STDOUT和STDERR流自动附加到nohup.out文件。 使用只是:'nohup/path/to/your/command&' – leonarth 2015-11-13 16:28:59

11

如果它们在同一个目录中的脚本,包含:

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

&末是什么使你的脚本在后台运行。

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

+0

感谢每一个机构。所有的答案真的很有用,谢谢。 – 2012-02-08 10:22:17

23

输出重定向到一个文件是这样的:

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

这都将输出和错误重定向到同一个文件。如果你想输出和错误重定向到两个不同的文件使用:

./a.sh > stdoutfile 2> stderrfile & 

您可以使用/dev/null为一个或两个文件,如果你不关心stdout和/或标准错误。有关重定向的详细信息,请参阅bash manpage

13

对不起,这是一个有点晚,但发现somple命令理想的解决方案,你不希望任何标准或错误输出(信贷,这是由于:http://felixmilea.com/2014/12/running-bash-commands-background-properly/

这重定向输出为null,保持屏幕清晰:

command &>/dev/null & 
+0

注意:命令将终止时,终端关闭了。 – Banana 2017-02-12 19:30:29

+0

对于任何在将来想要解决方案以在会话结束后保持命令运行的人,我都会建议使用screen或tmux。他们必须在关闭初始会话后进行“会话中的会话”。如果您重新登录,则可以重新连接到正在进行的会话。 非常适合运行rsync备份,例如同步需要长时间运行并且不想让会话保持运行状态。 – DanteAlighieri 2017-03-16 13:13:41

相关问题