[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