如何在后台运行命令而没有输出?

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

364884 次浏览

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

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

最后的 &使脚本在后台运行。

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

将输出重定向到如下文件:

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

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

./a.sh > stdoutfile 2> stderrfile &

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

有关重定向的详细信息,请参阅 Bash 手册

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

Stdout真是的重定向到 /dev/null以忽略输出。

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

对不起,这有点晚,但找到了理想的解决方案,为一些命令,您不希望任何标准或错误输出(信贷在哪里应该: http://felixmilea.com/2014/12/running-bash-commands-background-properly/)

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

command &>/dev/null &
nohup sh -x runShellScripts.sh &

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

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

这些例子很有效:

Nohup sh prog.sh prolog.log 2 > & 1 &

For 循环可以这样使用:

For i in {1. . 10} ; do sh prog.sh; sleep 1; done prog.log 2 > & 1 &

它在后台工作,不显示任何输出。

如果你想在 linux 的 kickstart 中运行这个脚本,你必须像下面这样运行。

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