Io-Redirection
重定向手冊頁的奇怪行為
我想使用 將
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
.