「入力」と「コマンドライン引数」は別物です。
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 を読み取る一般的なコマンドの場合)。