Io-Redirection

“貓”和“貓<”之間的區別

  • November 24, 2019

我正在學習一個教程,並看到了兩者的cat myfile.txt使用cat &lt; 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 &lt; myfile.txt
ksh93: myfile.txt: cannot open [No such file or directory]

在更一般的情況下,主要區別是使用重定向不能用於列印多個文件的內容,這畢竟是cat(即cat enate)命令的原始目的。請注意,shell 無論如何都會嘗試打開所有作為重定向輸入傳遞的文件,但實際上只會傳遞最後一個文件,cat除非您使用zsh它及其multios“zshism”。

$ echo one &gt; one
$ echo two &gt; two
$ cat one two # cat opens one, shows one, opens two, shows two
one
two
$ cat &lt; one &lt; two # sh opens one then opens two, cat shows stdin (two)
two
$ rm one two
$ echo one &gt; one
$ cat one two # cat opens and shows one, fails to open two
one
cat: two: No such file or directory
$ cat &lt; one &lt; 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 的回復和附加的評論已經建議的那樣,使用sudoto raisecat的特權將在行為上產生很大的不同。

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