Io-Redirection

重定向手冊頁的奇怪行為

  • December 24, 2018

我想使用 將mc手冊頁重定向到一個文本文件man mc > mc,但我不小心執行了man mc > mc grep。結果是一個名為的文本文件mc,其中包含兩個連接的mc手冊頁。

然後我嘗試man ls > 1 abc了,這導致名為1包含ls手冊頁的文本文件和終端中的錯誤消息:No manual entry for abc.

接下來我嘗試了man du > du ls tac。我期望三個串聯du的手冊頁,但實際結果是一個名為的文本文件,其中包含,和串聯du的手冊頁。du``ls``tac

為什麼每個命令都會產生它所產生的結果?

這與 Bash 手冊中相對晦澀的部分一致,該部分在Shell Grammar部分下說明:

一個簡單的命令是一系列可選的變數賦值,後跟空格分隔的單詞和重定向,並由控制運算符終止。第一個字指定要執行的命令,並作為參數零傳遞。剩餘的單詞作為參數傳遞給呼叫的命令。

(強調我的。)

這意味著您可以將任何重定向與命令及其參數“混合”。

例如,echo > world hello等價於echo hello > world

換句話說,當你執行類似的命令時man du > du ls tac,它相當於執行:

man du ls tac > du

這三個聯機幫助頁最終都連接到一個名為的文件中,這是其輸出被重定向或管道傳輸時行為du方式的結果man:它將不再嘗試使用分頁器,並且本質上將像cat.

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