如何在后台运行Shell脚本而没有输出


111

我写了两个shell脚本a.shb.sh。在a.shb.sh我有一个无限for循环,他们将一些输出输出到终端。我想写另一个脚本,同时呼吁a.shb.sh,但我想用户立即恢复,而不是已经无限运行脚本的终端的控制,我想隐藏在终端输出。

Answers:


220

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

重定向标准输出标准错误,以/dev/null忽略输出。

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

仅添加一下,有时脚本的参数,然后上述命令将返回Ambiguous output redirect
sabertooth1990

我发现一个更好的方法是使用“ nohup /path/to/your/script.sh parameter1 > & 1 &如果有人知道更好的方法”。
sabertooth1990

17
/dev/null 2>&1如果您正在使用nohup,则不需要,因为它已经自动将所有STDOUT和STDERR流附加到nohup.out文件中。仅使用:nohup /path/to/your/command &
莱昂纳多

1
@ sabertooth1990您的命令行有故障:-bash: syntax error near unexpected token '&'
notes-jj

1
您将如何杀死创建的进程?
Alexis_A

32

将输出重定向到这样的文件:

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

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

./a.sh > stdoutfile 2> stderrfile &

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

有关重定向的详细信息,请参见bash手册页


23

抱歉,这有点晚了,但是找到了不需要任何标准或错误输出的松散命令的理想解决方案(应归功于以下地址:http : //felixmilea.com/2014/12/running-bash-commands-background -正确/

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

command &>/dev/null &

2
注意:当终端关闭时,该命令将终止。
香蕉

1
对于希望在会话结束后保持命令运行的解决方案的人,我建议使用screen或tmux。他们必须运行一个“会话内的会话”,该会话在您关闭初始会话后继续进行。然后,如果您重新登录,则可以重新连接到正在进行的会话。非常适合运行rsync备份,例如,同步需要长时间运行并且您不想让会话继续运行。
DanteAlighieri

13

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

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

&在到底是什么让你的脚本在后台运行。

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


7

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

(&>/dev/null script.sh &)

这是唯一也不会打印后台作业日志的答案,[1] + 54765 done <emacs>谢谢
alper

2

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

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


0

这些示例工作正常:

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

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.