在閱讀有關 linux 的內容時,我得到了以下資訊:
由於 stderr 與 stdout 不同,因此在上例中的終端機視窗上仍會看到錯誤訊息。
如果要將 stderr 重新導向到單獨的文件,請使用 stderr 的文件描述符編號 (2)、大於號 (>),後面接著要儲存執行命令寫入 stderr 的所有內容的檔案名稱:
$ do_something 2> error-file
可以使用特殊的速記符號將寫入檔案描述符 2 (stderr) 的任何內容放在與檔案描述符 1 (stdout) 相同的位置:2>&1
$ do_something > all-output-file 2>&1
bash 允許使用更簡單的語法來實現上述內容:
$ do_something >& all-output-file
這do_something
是一些命令。我真的不明白上面提到的所有 3 個命令下面發生了什麼。我知道&
用於使進程成為後台進程,但我不明白其中的邏輯。我是這個口味的新手,有人可以解釋一下嗎?
答案1
您的困惑可能是因為>&
與 完全不同&
。
>&
或<&
用於重定向以指向檔案描述符 (fd)。上述情況重定向到1和2,分別是stdout和stderr。
>
意思是“重定向標準輸出”
2>
意思是“重定向 fd 2 (stderr)”
>&2
意思是「將 stdout 重新導向到 fd 2 (stderr)」。請注意這與>2
「將標準輸出重定向到名為」的檔案有何不同2
——這就是為什麼它&
很重要。它表明接下來的內容將是一個 fd,而不是一個檔名。
當然,正如您所指出的,如果 a&
本身沒有重定向符號,那麼它意味著完全不同的東西 - “立即返回,在後台運行前面的命令。”