リダイレクト演算子を削除しても出力は変わりません。なぜ?

リダイレクト演算子を削除しても出力は変わりません。なぜ?

どこかでリダイレクトを使うのを見て誤字だと思いました。

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

何が問題なの?

答え1

ファイルで動作する多くのユーティリティは、標準入力(標準入力)をストリーム入力として使用するか、ファイル名を引数として受け入れます。あなたの< file例では、ファイル出力をユーティリティにリダイレクトします。ファイルはシェルによって開き、以下を介してユーティリティに渡されます。標準入力..

一方 cat fileオープンと読み取り処理文書で、リダイレクトは含まれません。

lsファイルは読み込まれないため、ファイル名を引数として使用しません。開いて読むfile..(ファイル名マスクを許可します)... の場合、lsシェルの開いているファイルを読み取るプロセスがないため、リダイレクト操作は実際に無視されます。

ユーティリティがどのように機能するかを確認するには、man utility-nameターミナル...と入力します。男性は略語です手動...例えば。man catあなたへの贈り物猫ハンドブック

関連情報