$ sh < foo > bar このステートメントは問題です。

$ sh < foo > bar このステートメントは問題です。

次のコマンドは何をしますか?私は新入で、まだ学んでいます。

$ sh < foo > bar

このようなより多くの質問を明確に理解できるように、どのように段階的に説明できますか?

答え1

それを分析しましょう。コマンドは3つの部分に分けられます。

sh

sh実行するプログラムの名前です。この場合sh

< foo

<simbolは、次の単語がファイル名であり、コマンドシェル(shに関連付けられていないコマンドを実行するシェル、偶然シェルとなる呼び出されたプログラム)が標準入力に追加されることを意味しますfoo。 Content 記号の後に続くファイルを追加します。

> bar

>シンボルコマンドシェルは、実行可能プログラムの標準出力をファイルに追加しますbar

これらのリダイレクトパスは、プログラムの実行が開始される前に設定されます。

したがって、コマンド全体がsh < foo > barシェルで実行されます。プログラムがshファイルからコマンドを読み取り、fooその出力をファイルに保存するようにしますbar。ファイルがfoo存在しない場合、エラーが発生します。シェルの動作は、使用するシェルのオプションによって決まるファイルの存在に依存しますbarnoclobber

答え2

一般的に言えば、

$ utility <input >output

その結果、処刑utilityされる標準入力ストリームファイルinputとそのファイルへの接続標準出力ストリームファイルに接続しますoutput

その行は$シェルプロンプトで始まります(入力しません)。

shシェルコマンドソルバーの場合、シェルコマンドはsh入力ファイル(fooあなたの場合)から読み取られ、実行され、すべての出力が出力ファイル(あなたbarの場合)に書き込まれます。診断メッセージ(エラーと警告)は通常作成されるため、端末に表示され続けます。標準エラーストリーム、上記のコマンドラインは特定の場所にリダイレクトされません。

言及したコマンドはほぼ同じ効果があります。

$ sh foo >bar

その後、shコマンドラインに記載されているファイルから読み取ることができます。言及されたファイルがない場合は、標準入力ストリームからのみ読み取ることができます。

関連情報