启动后台进程时如何隐藏shell进程信息?


19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

如何/ dev / null这两条消息?

[1] 5232
[1]+  Done                    sleep 3

ps:所以我需要过程的输出,但是没有提到两行!


当您以交互方式运行它时,只会得到这些行。例如,如果您从脚本运行它,则不会。
derobert

Answers:


24

这不是程序输出,而是一些有用的shell信息。

无论如何,可以使用subshel​​l和输出重定向将其隐藏

( sleep 3 & ) > /dev/null 2>&1

2
“ 2> / dev / null”是一件好事,我需要该过程的输出
LanceBaynes 2011年

@LanceBaynes该过程还可以在stderr上写一些东西。
克里斯·

2
不幸的是,这失败了用$检索pid!
Deleplace'6

3

在bash或zsh中,您可以调用disown %1告诉Shell忘记这项工作。这样,shell将不会输出有关该作业的任何消息,也不会在您运行jobs或向其发送SIGHUP 时显示该消息。在zsh中,使用&!代替开始工作&等同于disown立即调用它。



1

尝试:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

并且您已经隐藏了输出PID。请注意,您仍然可以从$ REPLY 检索PID

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.