我写了两个 shell 脚本 a.sh
和 b.sh
。在 a.sh
和 b.sh
中,我有一个无限循环,它们会向终端输出一些内容。我想要编写另一个脚本来调用 a.sh
和 b.sh
,但我希望用户立即重新控制终端,而不是让脚本无限运行,并且我想隐藏终端中的输出。
我写了两个 shell 脚本 a.sh
和 b.sh
。在 a.sh
和 b.sh
中,我有一个无限循环,它们会向终端输出一些内容。我想要编写另一个脚本来调用 a.sh
和 b.sh
,但我希望用户立即重新控制终端,而不是让脚本无限运行,并且我想隐藏终端中的输出。
如果您的后台作业需要较长时间才能完成,或者您仅使用SecureCRT或类似工具登录服务器,请使用nohup
。
将 stdout 和 stderr 重定向到/dev/null
以忽略输出。
nohup /path/to/your/script.sh > /dev/null 2>&1 &
像这样将输出重定向到文件:
./a.sh > somefile 2>&1 &
这将会把标准输出和标准错误都重定向到同一个文件。如果你想要将标准输出和标准错误分别重定向到两个不同的文件,可以使用这个命令:
./a.sh > stdoutfile 2> stderrfile &
如果您不关心stdout和/或stderr,可以将/dev/null
用作一个或两个文件。
有关重定向的详细信息,请参见bash manpage 。
抱歉这有点晚了,但是我找到了简单命令的理想解决方案,您不需要任何标准或错误输出(功劳归于:http://felixmilea.com/2014/12/running-bash-commands-background-properly/)
这将输出重定向到null并保持屏幕清晰:
command &>/dev/null &
&>/dev/null
,它似乎是>/dev/null 2>&1
的简写!在这个例子中可能没有危害,但为了澄清事情:它不符合POSIX标准,并且在某些系统上使用#!/usr/bin/env sh
作为shebang时总是产生一个退出代码0。 - Martin Braun在子shell中运行以移除通知并关闭STDOUT和STDERR:
(&>/dev/null script.sh &)
[1] + 54765 done <emacs>
。谢谢。 - alper如果它们与包含脚本的同一目录中:
./a.sh > /dev/null 2>&1 &
./b.sh > /dev/null 2>&1 &
在结尾处添加的&
是让你的脚本在后台运行的关键。
> /dev/null 2>&1
这部分并不是必需的,它重定向了标准输出和标准错误流,这样你就不必在终端上看到它们。对于有大量输出的嘈杂脚本,你可能希望这样做。
nohup sh -x runShellScripts.sh &
-x
是什么意思? - alpersh /tmp/script.sh > /dev/null 2>&1 < /dev/null &
这些例子都可以正常工作:
nohup sh prog.sh proglog.log 2>&1 &
循环语句可以像这样使用:
for i in {1..10}; do sh prog.sh; sleep 1; done prog.log 2>&1 &
它在后台运行且不显示任何输出。
nohup /path/to/your/script.sh parameter1 > & 1 &
如果有人知道更好的方法,请告诉我。 - sabertooth1990nohup
命令,就不需要使用/dev/null 2>&1
,因为它会自动将所有的标准输出和错误流附加到nohup.out
文件中。只需使用以下命令:nohup /path/to/your/command &
。 - leonardo-bash: syntax error near unexpected token '&'
。 - notes-jj