次のコマンドは何をしますか?私は新入で、まだ学んでいます。
$ sh < foo > bar
このようなより多くの質問を明確に理解できるように、どのように段階的に説明できますか?
答え1
それを分析しましょう。コマンドは3つの部分に分けられます。
sh
sh
実行するプログラムの名前です。この場合sh
。
< foo
<
simbolは、次の単語がファイル名であり、コマンドシェル(shに関連付けられていないコマンドを実行するシェル、偶然シェルとなる呼び出されたプログラム)が標準入力に追加されることを意味しますfoo
。 Content 記号の後に続くファイルを追加します。
> bar
>
シンボルコマンドシェルは、実行可能プログラムの標準出力をファイルに追加しますbar
。
これらのリダイレクトパスは、プログラムの実行が開始される前に設定されます。
したがって、コマンド全体がsh < foo > bar
シェルで実行されます。プログラムがsh
ファイルからコマンドを読み取り、foo
その出力をファイルに保存するようにしますbar
。ファイルがfoo
存在しない場合、エラーが発生します。シェルの動作は、使用するシェルのオプションによって決まるファイルの存在に依存しますbar
。noclobber
答え2
一般的に言えば、
$ utility <input >output
その結果、処刑utility
される標準入力ストリームファイルinput
とそのファイルへの接続標準出力ストリームファイルに接続しますoutput
。
その行は$
シェルプロンプトで始まります(入力しません)。
sh
シェルコマンドソルバーの場合、シェルコマンドはsh
入力ファイル(foo
あなたの場合)から読み取られ、実行され、すべての出力が出力ファイル(あなたbar
の場合)に書き込まれます。診断メッセージ(エラーと警告)は通常作成されるため、端末に表示され続けます。標準エラーストリーム、上記のコマンドラインは特定の場所にリダイレクトされません。
言及したコマンドはほぼ同じ効果があります。
$ sh foo >bar
その後、sh
コマンドラインに記載されているファイルから読み取ることができます。言及されたファイルがない場合は、標準入力ストリームからのみ読み取ることができます。