パイプを介して入力を許可するコマンドのLinux実装と、コマンドパラメータを介して入力を許可するコマンドの違いは何ですか?

パイプを介して入力を許可するコマンドのLinux実装と、コマンドパラメータを介して入力を許可するコマンドの違いは何ですか?

似たような質問がたくさんありますが、私の質問に直接答える質問は見つかりません。オペレーティングシステムのメモリ管理、プロセス、プロセス間通信などの基本を理解します。ただし、パイプを介して入力を受け取ることができるコマンド実装と、コマンドパラメータのみを許可できるコマンド実装との基本的な違いは明らかではありません。

コマンドが1つの方法で入力を受け入れますが、他の方法では入力を許可しないのはなぜですか。

ls簡単な例を挙げると、出力のファイル名をcat表示用にパイプできますが、同じ操作を実行できないのはなぜですかrm?これらの動作の違いをもたらす哲学的理由、深刻な技術的理由、または実装に任意の選択肢がありますか?

ls | cat
delete_me_1.txt
delete_me_2.txt

ls | rm
rm: missing operand

つまり、Linuxコマンドを作成する場合は、パイプ、コマンドパラメータ、またはその両方を介してコマンド入力を許可するかどうかを選択するためにどのような技術的要素を考慮する必要がありますか?

ベストアンサー1

ただし、パイプを介して入力を受け取ることができるコマンド実装とコマンドパラメータのみを許可できるコマンド実装との基本的な違いは明らかではありません。

まあ、それらの1つ(またはその両方?)を使用するかどうかは、プログラム開発者が決定する問題です。オペレーティングシステムとは何の関係もなく、オペレーティングシステムが引数の渡し、入力ファイル記述子の読み取り、および読み取りメソッドを提供するだけです。標準入力レンダリング。

したがって、この質問はLinuxより20年以上前になるでしょう。これは、標準入力とコマンドライン引数の概念が最初に登場した時期です(Thompson、Ritchie、Kernigan、McIlroyが登場していないと確信しているUNIXの誕生)。意外にも)。

つまり、Linuxコマンドを作成する場合は、パイプ、コマンドパラメータ、またはその両方を介してコマンド入力を許可するかどうかを選択するためにどのような技術的要素を考慮する必要がありますか?

あなたの目的に合った可用性と適合性!

一部のデータを処理すると、より多くの可能性があります。効果がある特に、入力を生成したプログラムが終了する前に出力を生成できる場合は、標準入力として提供します。プログラムの起動時にのみコマンドライン引数を渡すことができるため、連続プロデューサを使用してデータストリーミングが必要な作業を実行する場合は、これを行う方法を疑問に思う必要はありません。

何かの動作を変更したり、可変数の引数に基づいて何かを計算したい場合は、その引数を入力に渡す構造化方法よりもコマンドライン引数を使用する方が簡単です。

だからそれは実際にあなたがどうするかによって異なります。考える使いたいプログラム。技術的な問題ではなく質問です。目的

事実:今は2022年です。広く使用されている現代言語では、構造化入力データ(JSONなど)をプログラムで簡単に使用できる辞書/マップ/キー値データ構造に解析できるライブラリがあります。コマンドライン引数を解析する場合も同様です!一般に、コマンドライン引数パーサーは構成ファイルも構文解析できるため(CLI11などの標準入力を構成ファイルとして使用できます)、技術的にどちらかを実行できるプログラムを選択する必要さえありません。

おすすめ記事