Bash

刪除重定向運算符不會更改輸出。為什麼?

  • October 8, 2014

我在某處看到了這種重定向用法,並認為這是一個錯字:

grep root < /etc/passwd

但是在我執行它之後,我看到它給出了相同的輸出 grep root /etc/passwd

$ grep root < /etc/passwd
root:x:0:0:root:/root:/bin/bash

$ grep root   /etc/passwd
root:x:0:0:root:/root:/bin/bash

同樣的事情發生

cat < /etc/passwd
cat   /etc/passwd

但是,當與 一起使用時,重定向會被忽略ls

ls < /etc/passwd

不列印相同的輸出

ls  /etc/passwd

怎麼了?

許多處理文件的實用程序將接受標準輸入(標準輸入)作為流輸入,或接受文件名作為參數。您的< file範例將文件的輸出重定向到實用程序。該文件由 shell 打開並通過stdin傳遞給您的實用程序..

另一方面, with cat filecat處理文件的打開和讀取,不涉及重定向。

ls從不讀取文件,因此它不會將文件名作為參數以打開和讀取文件..(它接受文件名遮罩)…對於ls,重定向操作實際上被忽略了,因為程序中沒有任何內容讀取外殼打開的文件…

要確定任何實用程序的行為方式,只需man utility-name在終端中輸入… man手動的縮寫… 例如。man cat送你一份貓的手冊

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