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つはパラメータを介したものです。
標準入力とリダイレクト
これは、基本的にコマンドが実行される端末に接続されるストリームであり、ファイル記述子(fd)1に関連付けられています。端末に入力した内容はすべて入力されます。
|
パイプを使用したり、ここでドキュメントを使用したり、ここで文字列を使用したりするのと同じように、入力(入力)がリダイレクトされる可能性があります。入力は端子から出るのではなく、パイプに追加される前のコマンドの標準出力です。シェルごとにリダイレクトが異なるため、このカテゴリのシェルのドキュメントを確認する必要があります。探すリダイレクトを入力します。パラメータ
これがあなたの例にあります
sort foo
。プログラムまたは関数を呼び出すときに1つ以上のパラメータを渡します。ローカルファイルは唯一の可能性です。このパラメータにはURLまたは他のコンテンツを含めることができます。ここのオプションは無限です。
要約すると、一般的に2つの方法があります。
最初はアプリケーションの内部ロジックを抽象化し、OS/シェルレベルの標準入力で動作します。
2つ目はアプリケーションの内部構造に関連していますが、呼び出しパラメータをインタフェースに基づいて無限の可能性を提供するのはまさに構造です。
どちらの場合も、答えに制限はありません。実際の制限は、オペレーティングシステム/シェルとアプリケーション自体で発生します。
答え2
少なくとも以下のことがあります。
コマンドオプション:
foo --bar
標準入力:
foo | bar
またはbar < foo
ファイル:(
foo *.*
またはコードを介してファイルを開くfoo
)†環境出力:
export foo=bar; baz
環境(エクスポートなし):
foo=bar baz
またはenv foo=bar baz
文書は次のとおりです。
foo << EOF bar EOF
文字列は次のとおりです。
foo <<< bar
シグナル
kill -SIGUSR1 $procid
フルレンジプロセス間通信、ソケット、TCP、メモリマッピングファイルなど
†はい、stdinがファイル(または同様のもの)であることがわかります。このようなファイルを渡すことは、実際にオプションを渡すのと同じです。