如何在后台运行shell脚本并且不输出任何内容

Beh*_*ari 101 linux scripting sh background-process

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

Geo*_*rge 201

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

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

nohup /path/to/your/script.sh > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

  • 如果您正在使用`nohup`,则不需要`/ dev/null 2>&1`,因为它已经自动将所有STDOUT和STDERR流附加到nohup.out文件.使用:`nohup/path/to/your/command&` (13认同)

Ada*_*man 31

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

./a.sh > somefile 2>&1 &
Run Code Online (Sandbox Code Playgroud)

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

./a.sh > stdoutfile 2> stderrfile &
Run Code Online (Sandbox Code Playgroud)

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

有关重定向的详细信息,请参阅bash联机帮助页.


Dan*_*eri 20

对不起,这有点晚了,但找到了理想的解决方案,你不需要任何标准或错误输出的正确命令(信用到期的地方:http://felixmilea.com/2014/12/running-bash-commands-background - 正确地/)

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

command &>/dev/null &
Run Code Online (Sandbox Code Playgroud)

  • 注意:当终端关闭时,该命令将终止。 (2认同)
  • 对于将来关注此问题并希望有一个解决方案在会话结束后保持命令运行的任何人,我建议 screen 或 tmux。他们必须运行一个“会话中的会话”,该会话在您关闭初始会话后继续进行。然后,如果重新登录,您可以重新连接到正在进行的会话。非常适合运行 rsync 备份,例如同步需要运行很长时间并且您不想让会话保持运行状态。 (2认同)

Mic*_*nen 12

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

./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &
Run Code Online (Sandbox Code Playgroud)

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

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


Tom*_*ale 12

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

(&>/dev/null script.sh &)
Run Code Online (Sandbox Code Playgroud)

  • 这是唯一也不将后台作业日志打印为“[1] + 54765 did <emacs>”的答案,谢谢 (7认同)
  • 这绝对是一种魅力!以下是有关子 shell 的更多文档:https://tldp.org/LDP/abs/html/subshel​​ls.html (2认同)