我想重定向该命令的输出firefox &
。我知道添加&
意味着我们将在后台运行该命令,当我们使用它时,我们会收到[number of process in background] [PID]
.这就是我所做的:
firefox & > firefoxFile
但当我打开时firefoxFile
,却发现里面空空如也。我没找到[number of process in forground] [PID]
。
答案1
在你的评论中你写道
我想找到后台进程的pid和数量
那这个呢
firefox &
pid=$!
echo "The PID for the background process is $pid" >&2
获得 PID 后,您当然可以将其值写入您选择的任何文件中。
答案2
如果您的 shell 是 bash[1],您可以尝试:
exec 3>&2 2>firefoxFile; firefox & exec 2>&3-
这是您的 shell(例如 bash)将[jobnum] pid
后台作业通知打印到标准错误,不是火狐浏览器。这个组合暂时将 stderr 重定向到文件firefoxFile
,并将该通知捕获到其中和Firefox 在其生命周期内将写入 stderr 的任何内容。
[jobnum] Done firefox
当后台作业终止时,它不会捕获将打印的 bash。
你的firefox & > file
将被解析为两个命令1. firefox &
(它将firefox
在后台运行)和2. > file
(它将截断file
而不写入任何内容)。这肯定不是你想要的。
[1]你可以阅读这里为什么这个技巧在其他 shell 中不起作用;虽然可以在 中重定向 stderr zsh
,zsh
但不会将其提示和作业通知写入 stderr,而是写入指向当前终端的另一个 fd,专门为此目的而打开。
答案3
这并不准确,但很接近。您只需要添加一点sed
。
firefox &
jobs -l | grep -E "\[[0-9]+\]\+" > firefoxFile