「猫」と「猫<」の違い

「猫」と「猫<」の違い

私はチュートリアルに従い、そしてのcat myfile.txt使い方を見ましたcat < myfile.txt。これら2つのコマンドシーケンスの間に違いはありますか?どちらもファイルの内容をシェルに印刷するようです。

答え1

最初のケースではcatファイルが開き、2番目のケースではシェルはファイルを開き、catそれを標準入力に渡します。

技術的には異なる効果があるかもしれません。たとえば、catプログラムよりも(またはより少ない)権限を持つシェル実装があるかもしれません。この場合、ある人はファイルを開くことができますが、他の人はファイルを開くことができません。

これは一般的なケースではありませんが、シェルと同じプログラムではないことcatを指摘するために言及されています。

答え2

テストケースと大きな違いはありません。最も明白なのは、myfile.txt指定されたファイルが現在のディレクトリに存在しない場合、またはそのファイルを読み取れない場合にエラーメッセージが表示されることです。

前者の場合はcat文句を言います。後者の場合、シェルはどのプロセスがファイルを開こうとしているかを明確に表示します。cat前者の場合、後者の場合、シェルは明確に表示されます。

$ cat myfile.txt
cat: myfile.txt: No such file or directory
$ cat < myfile.txt
ksh93: myfile.txt: cannot open [No such file or directory]

より一般的なケースの1つの主な違いは、リダイレクトを使用して複数のファイルの内容を印刷するために使用できないことですcatエネイト)命令。シェルはとにかくリダイレ​​クト入力に渡されたすべてのファイルを開こうとしますが、実際には「zshism」をcat使用しない限り、最後のファイルだけを渡します。zshmultios

$ 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]

標準システムでは、catシェルアクセス権とファイルアクセス権の間に違いはないため、どちらも成功または失敗します。 Thomas Dickeyの回答と添付のコメントですでに分かるように、sudo高いcat権限を使用すると行動に大きな影響があります。

答え3

cat myfile.txtファイルを読み取り、myfile.txt標準出力として印刷します。

cat < myfile.txtこれはcat列ファイルを提供していないため、多くのUnixコマンドと同様に、データは標準入力から読み取られ、データfile.txtはシェルによって指示され、標準出力に印刷されます。

答え4

他のコマンドを使用して違いを確認できます。

wc –w food2.txt

可能な出力:

6 food2.txt

このコマンドは、知っているようにファイル名を伝えます(引数として渡されます)。

wc –w < food2.txt

可能な出力:

6

標準入力はファイルにパスをリダイレクトし、food2.txtコマンドはファイル名を知りません。

関連情報