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

如何在启动后台进程时隐藏shell进程信息?
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

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

[1] 5232
[1]+  Done                    sleep 3

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

答案1

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

无论如何,可以通过使用子 shell 和输出重定向来隐藏它们

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

答案2

在 bash 或 zsh 中,您可以调用disown %1来告诉 shell 忘记该作业。然后,shell 将不会打印有关该作业的任何消息,也不会在您运行jobs或向其发送 SIGHUP 时显示该消息。在 zsh 中,使用&!而不是启动作业&相当于disown立即调用它。

答案3

尝试:

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

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

答案4

还不能对 @Gilles 发表评论,但似乎& disown在 bash 中也有效:

sleep 3 & disown

相关内容