Shell

在 shell 中,當我在後台執行程序時,我怎樣才能獲得“jobnumberj這bn在米b和rjob number磷一世D磷一世DPID’,重定向到一個文件?

  • March 1, 2020

我想重定向這個命令的輸出firefox &。我知道添加&意味著我們將在後台執行命令,當我們使用它時,我們會收到[number of process in background] [PID]. 這就是我所做的:

firefox & > firefoxFile 

但是當我打開時firefoxFile,我發現它是空的。我沒找到[number of process in forground] [PID]

如果你的 shell 是 bash

$$ 1 $$, 你可以試試:

exec 3>&2 2>firefoxFile; firefox & exec 2>&3-

[jobnum] pid將後台作業通知列印到stderr是您的 shell(例如 bash),而不是 firefox。這個 kludge 臨時將 stderr 重定向到firefoxFile文件,將通知以及firefox 在其生命週期內將寫入 stderr 的內容擷取到文件中。

[jobnum] Done firefox當後台作業終止時,它不會擷取將列印的bash。


firefox & > file將被解析為兩個命令1. firefox &(將firefox在後台執行)和2. > file(將截斷file而不向其寫入任何內容)。這肯定不是你想要的。

$$ 1 $$你可以在這裡閱讀為什麼這個技巧在其他 shell 中不起作用;雖然可以將 stderr 重定向到zshzsh但不會將其提示和作業通知寫入 stderr,而是寫入指向目前終端的另一個 fd,專門為此目的打開。

引用自:https://unix.stackexchange.com/questions/570428