我正在运行这个命令:
$ 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 中打印