コマンドに入力を提供するには、いくつの方法がありますか?

コマンドに入力を提供するには、いくつの方法がありますか?

Linuxについて私が最初に気づいたのは、コマンドにデータを入力するさまざまな方法でした。いくつか知っていましたが、どのくらいの合計を知らなかった。

これまで私が知っている方法は次のとおりです。

管路:

echo -e "zorro\nwurst\nlahmacun\nsozialhilfe" | sort

ファイル終了信号があるキーボードから:

sort
>gurken
>zucker
>braunkohle

ドキュメントから:

sort foo

HERE文字列(実際にはHERE文書と呼ばれます):

sort << HERE
>wasserkopf
>elternzeit
>schuldeingeständnis
>währungsreform
>alabasterhaut
HERE

これはすべてですか、それとももっと方法がありますか?なぜ他の方法がありますか?一部は重複していますか?

答え1

まず、sort << HEREここでwaitは文字列ではありません。これはここのドキュメントです。ここの文字列は<<<演算子を使用します。これはbash(および他のシェル)にあります。

一般的に2つの方法があります。 1つは標準入力(およびリダイレクト)を介したもの、もう1つはパラメータを介したものです。

  1. 標準入力とリダイレクト

    これは、基本的にコマンドが実行される端末に接続されるストリームであり、ファイル記述子(fd)1に関連付けられています。端末に入力した内容はすべて入力されます。|パイプを使用したり、ここでドキュメントを使用したり、ここで文字列を使用したりするのと同じように、入力(入力)がリダイレクトされる可能性があります。入力は端子から出るのではなく、パイプに追加される前のコマンドの標準出力です。シェルごとにリダイレクトが異なるため、このカテゴリのシェルのドキュメントを確認する必要があります。探すリダイレクトを入力します。

  2. パラメータ

    これがあなたの例にありますsort foo。プログラムまたは関数を呼び出すときに1つ以上のパラメータを渡します。ローカルファイルは唯一の可能性です。このパラメータにはURLまたは他のコンテンツを含めることができます。ここのオプションは無限です。

要約すると、一般的に2つの方法があります。

  • 最初はアプリケーションの内部ロジックを抽象化し、OS/シェルレベルの標準入力で動作します。

  • 2つ目はアプリケーションの内部構造に関連していますが、呼び出しパラメータをインタフェースに基づいて無限の可能性を提供するのはまさに構造です。

どちらの場合も、答えに制限はありません。実際の制限は、オペレーティングシステム/シェルとアプリケーション自体で発生します。

答え2

少なくとも以下のことがあります。

  1. コマンドオプション:foo --bar

  2. 標準入力:foo | barまたはbar < foo

  3. ファイル:(foo *.*またはコードを介してファイルを開くfoo)†

  4. 環境出力:export foo=bar; baz

  5. 環境(エクスポートなし):foo=bar bazまたはenv foo=bar baz

  6. 文書は次のとおりです。foo << EOF bar EOF

  7. 文字列は次のとおりです。foo <<< bar

  8. シグナルkill -SIGUSR1 $procid

  9. フルレンジプロセス間通信、ソケット、TCP、メモリマッピングファイルなど

†はい、stdinがファイル(または同様のもの)であることがわかります。このようなファイルを渡すことは、実際にオプションを渡すのと同じです。

関連情報