在 Ubuntu 中使用 nohup - 如何使其不显示作业编号?

在 Ubuntu 中使用 nohup - 如何使其不显示作业编号?

我正在运行这个命令:

$ nohup command > foo.out 2> foo.err < /dev/null &

我的问题是,即使nohup我的命令在后台运行,它也会在我的终端上打印出类似这样的内容:

[1] 27918

我如何让它不输出作业编号?我只想让它在后台执行而不告诉我任何事情。在 Mac OS X 上,情况确实如此,所以我有点恼火,因为它在 Ubuntu 上的工作方式不同……

谢谢您的帮助!

答案1

作业信息由你的 shell 显示,而不是nohup

您可以尝试这个替代方案:

(yourcommand&)

(生成一个子shell,以不同的方式处理作业控制。

(我的 ~/.bashrc 中有nh() { ("$@" &); },因此我可以输入nh command来做同样的事情。)

另一种不同的方法:

setsid yourcommand

编辑:这似乎(setsid yourcommand &)是最好的组合,因为它脱离了 tty在交互模式和脚本模式下同样有效。

答案2

[1] 27918 来自 & 而不是 nohup。

将您想要在后台运行的命令放入脚本文件中:

#!/bin/sh
/path/to/command & >/dev/null 2>/dev/null

然后使用 nohup 调用

nohup sh /path/to/my/script > foo.out 2> foo.err < /dev/null

然后,& 的输出被重定向到脚本内部的 /dev/null。

答案3

正如上面提到的那样(顺便说一句,谢谢)。

在名为 test.ksh 的脚本中:

#!/bin/ksh
./test2.ksh >/dev/null
nohup ksh test2.ksh < /dev/null
echo  "whatever"

其中 test2.ksh 是另一个脚本(或可能是命令):

#!/bin/ksh
max=10
for ((i=2; i<=$max; ++i )) ; do
    echo -e "\n Hello world "
done

然后运行:

~> ksh test.ksh

输出为:

nohup: appending output to `nohup.out'
whatever
~>

它对我有用

如果你在重定向中保留 &

./test2.ksh & >/dev/null

它将在 tty 和文件 .out 中打印

相关内容