Io-Redirection
“貓”和“貓<”之間的區別
我正在學習一個教程,並看到了兩者的
cat myfile.txt
使用cat < myfile.txt
。這兩個命令序列之間有區別嗎?似乎兩者都將文件的內容列印到外殼。
在第一種情況下,
cat
打開文件,在第二種情況下,shell 打開文件,將其作為cat
標準輸入傳遞。從技術上講,它們可能會產生不同的效果。例如,有可能擁有比
cat
程序更多(或更少)特權的 shell 實現。對於這種情況,一個可能無法打開文件,而另一個可能。那不是通常的情況,但提到要指出shell 和
cat
不是同一個程序。
您的測試案例沒有明顯的明顯差異。最明顯的一個是如果
myfile.txt
目前目錄中沒有指定文件,或者不允許您讀取它,則會收到錯誤消息。在前一種情況下,
cat
會抱怨,在後一種情況下,你的 shell 會清楚地顯示哪個程序正在嘗試打開文件,cat
在前一種情況下,在後一種情況下是 shell。$ cat myfile.txt cat: myfile.txt: No such file or directory $ cat < myfile.txt ksh93: myfile.txt: cannot open [No such file or directory]
在更一般的情況下,主要區別是使用重定向不能用於列印多個文件的內容,這畢竟是
cat
(即cat enate)命令的原始目的。請注意,shell 無論如何都會嘗試打開所有作為重定向輸入傳遞的文件,但實際上只會傳遞最後一個文件,cat
除非您使用zsh
它及其multios
“zshism”。$ echo one > one $ echo two > two $ cat one two # cat opens one, shows one, opens two, shows two one two $ cat < one < two # sh opens one then opens two, cat shows stdin (two) two $ rm one two $ echo one > one $ cat one two # cat opens and shows one, fails to open two one cat: two: No such file or directory $ cat < one < two # the shell opens one then opens two, fails and # displays an error message, cat gets nothing on stdin # so shows nothing ksh93: two: cannot open [No such file or directory]
在標準系統上,shell 和
cat
文件訪問權限沒有區別,因此兩者都會成功或失敗。正如 Thomas Dickey 的回復和附加的評論已經建議的那樣,使用sudo
to raisecat
的特權將在行為上產生很大的不同。