web-dev-qa-db-ja.com

猫とパイプとリダイレクト

これら2つのコマンドの違いは何ですか?

cat /proc/uptime | awk '{print $1}'

< /proc/uptime awk '{print $1}'

具体的には、2番目のコマンドはどのように機能しますか?リダイレクト演算子ではない<はコマンドを伴う必要がありますか?そのようなファイルのコンテンツをリダイレクトするとはどういう意味ですか?

6
walksignison

一般に、foo < bar< bar fooはbashスクリプトでは同等です。 < filenameがシェルによって処理されるときはいつでも、関連付けられているコマンドがその標準入力をそのファイルから取得することを意味します。これに追加のコマンドやプロセスは含まれません。シェルがそれを行います。

cat filenameを実行すると、指定したファイルの内容が読み取られ、標準出力に書き込まれます。 2つのコマンド間の|は、左のコマンドの標準出力を右のコマンドの標準入力に接続することを意味します。

したがって、どちらのコマンドも/proc/uptimeの内容をawkに送信するのと同じ効果がありますが、最初の方法は、追加のcatプロセスを開始して送信します。