
私はチュートリアルに従い、そしての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
使用しない限り、最後のファイルだけを渡します。zsh
multios
$ 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
コマンドはファイル名を知りません。