我编写了两个 shell 脚本 a.sh和 b.sh。在 a.sh和 b.sh中,我有一个无限的 for 循环,它们将一些输出打印到终端。我想写另一个脚本,调用 a.sh和 b.sh,但我希望用户立即重新获得对终端的控制,而不是让脚本无限运行,我想隐藏在终端的输出。
a.sh
b.sh
如果它们与包含以下内容的脚本在同一目录中:
./a.sh > /dev/null 2>&1 & ./b.sh > /dev/null 2>&1 &
最后的 &使脚本在后台运行。
&
> /dev/null 2>&1部分是不必要的-它重定向 stdout 和 stderr 流,这样您就不必在终端上看到它们,对于有大量输出的嘈杂脚本,您可能希望这样做。
> /dev/null 2>&1
将输出重定向到如下文件:
./a.sh > somefile 2>&1 &
这将把 stdout 和 stderr 重定向到同一个文件。如果要将 stdout 和 stderr 重定向到两个不同的文件,请使用以下命令:
./a.sh > stdoutfile 2> stderrfile &
如果不关心 stdout 和/或 stderr,可以将 /dev/null用作其中一个或两个文件。
/dev/null
有关重定向的详细信息,请参阅 Bash 手册。
如果您的后台作业需要很长时间才能完成,或者您只是使用 SecureCRT 或类似的东西登录服务器,请使用 nohup。
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 &