コマンドを入力でフィードするには、合計でいくつの方法がありますか?


9

Linuxで最初に気付いたのは、コマンドにデータを供給するさまざまな方法でした。いくつかは知っていますが、全体の数はわかりません。

私がこれまでに知っている方法:

配管:

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

End of File信号を使用したキーボードから:

sort
>gurken
>zucker
>braunkohle

ファイルから:

sort foo

こちらの文字列(実際にはこちらのドキュメントと呼ばれます):

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

これはすべてですか、それとも実行する方法が他にもありますか?なぜ、まったく異なる方法があるのですか?いくつかの方法は冗長ですか?

回答:


9

少なくとも以下:

  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、メモリマップファイルなど、さまざまなプロセス間通信

†はい、標準入力がファイル(またはファイルのような)であることを理解しています。そして、このようなファイルを渡すことは、オプションを渡すことと本当に同じです


1
foo < bar追加のバリアントとして追加する場合があります(stdinを介してファイル)
Hagen von Eitzen

14

そもそもsort << HERE、ヒアストリングではありません。それはヒアドキュメントです。here-stringは<<<演算子を使用します。それはbash(および他のいくつかのシェル)にあります。

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

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

    これは、デフォルトで端末に接続されるストリームであり、そこでコマンドが実行され、fd(ファイル記述子)1に関連付けられます。端末に入力されたものは何でも供給されます。それ(入力)は、パイプ|を使用する場合や、here-documentsまたはhere-stringsを使用する場合と同じようにリダイレクトできます。次に、入力はターミナルからではなく、パイプの前のコマンドの標準出力にアタッチされます。シェルによってリダイレクトは異なるため、このカテゴリについてはシェルのドキュメントを確認する必要があります。入力リダイレクトを探します。

  2. パラメーター

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

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

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

  • 2つ目はアプリケーションの内部に関するものであり、呼び出しパラメーターをインターフェースとして使用することで、無限の可能性を提供するものです。

どちらの場合も、答えは制限がないということです。実際の制限はOS /シェルとアプリケーション自体に付属していますが。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.