GNU/Linux >> Linux の 問題 >  >> Linux

入力が Bash のパイプに送信される方法を理解する

「入力」と「コマンドライン引数」は別物です。

rm 引数として提供されたファイルを削除します。

パイプは、左側のコマンドの出力を右側のコマンドの入力にリダイレクトします。右側のプログラムのコマンド ライン引数には影響しません。

あなたがやろうとしていることをするために、 xargs を使ってみてください プログラムを実行するために、標準入力をコマンドライン引数に変換します。それがその仕事です。

which gem | xargs rm 、たとえば、 gem を削除します


rm 入力をとらず、引数を取ります。これらは異なります。引数は、コマンド ラインでプログラムの動作に影響を与えるスイッチやファイル名などです。入力は、プログラムが処理するデータです。例:grep 入力と引数の両方を取ります:

grep "foo" file.txt

2 つの引数があります "foo"file.txt . 入力 コンテンツです file.txt の 、文字列 file.txt ではありません 自体。 grep は入力を受け取るので、パイプで使用できます:

cat file.txt | grep "foo"

cat は file.txt を取っているため、同じ出力が生成されます。 引数として、コンテンツを生成します file.txt の 出力として。その出力は次に grep にパイプされ、最初の例のように grep でファイル自体を開くのと同じ効果が得られます。

1 つのプログラムの出力を 引数 として使用する場合 別のものにするには、バッククォートを使用します:

rm `which gem`

または、この代替 (bash 固有の) 構文:

rm $(which gem)

編集:または xargs 別の回答者が指摘するように。コマンド ラインで猫の皮を剥ぐ方法はたくさんあります。


man をチェックしてください 興味のあるコマンドのページ。これらのプログラムは、stdin から読み取ることを示します。 (man grep を試してください stdin を読み取る一般的なコマンドの場合)。


Linux
  1. Bashでループを作成する方法

  2. Bashスクリプトをデバッグする方法は?

  3. Bashのヌル区切り入力で`head`と`tail`を実行する方法は?

  1. Bash履歴コマンドの使用方法

  2. バッシュを検出する方法>=4.0?

  3. Bash スクリプト - ユーザー入力の読み取り方法

  1. bash スクリプトに少なくとも 2 つの引数が指定されていることを確認します

  2. bash:特殊文字を含むコマンドライン引数を渡す方法

  3. bashで(コマンド引数のように)引用符で文字列を分割する方法は?