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


0

我正在运行此命令:

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

我的问题是即使 nohup 让我的命令在后台运行,它打印出这样的东西到我的终端:

[1] 27918

如何使其不输出作业号?我只是想让它在后台完成而不告诉我任何事情。在Mac OS X上,这正是发生的事情,所以我有点恼火,它在Ubuntu上的工作方式不同......

谢谢您的帮助!


2
[1] 27918来自&amp;不是nohup
Majenko

谢谢马特,做到了。现在我该如何关闭这个问题......
hora

这样做的方法是使用旁边的复选标记将答案标记为已接受。
Dennis Williamson

看到 superuser.com/faq “我如何提问”
grawity

Answers:


4

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

你可以试试这个替代方案:

(yourcommand&)

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

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

另一种不同的方式:

setsid yourcommand

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


(命令&amp;)为我工作,我在nohup有ioctl错误。
Shahzada Hatim

1

[1] 27918来自&amp;不是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

&amp;输出然后重定向到脚本内的/ dev / null。


& 只是一个命令终止符,它不输出任何内容,你不能重定向它。在交互模式下,作业行由shell打印;在非交互式(包括脚本)中,它保持安静。你的内部重定向适用于命令本身的输出,我不认为外部重定向会覆盖它们。
grawity

1

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

在名为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
~>

它对我有用

如果你保持&amp;在重定向

./test2.ksh & >/dev/null

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.