"Masukan" dan "argumen baris perintah" adalah hal yang berbeda.
rm
menghapus file yang disediakan sebagai argumen.
Sebuah pipa mengalihkan keluaran dari perintah sebelah kiri ke masukan dari perintah sebelah kanan. Itu tidak memengaruhi argumen baris perintah dari program di sebelah kanan.
Untuk melakukan apa yang Anda coba lakukan, coba gunakan xargs
untuk mengonversi input standar menjadi argumen baris perintah untuk menjalankan program. Itu tugasnya.
which gem | xargs rm
, misalnya, akan menghapus gem
di PATH Anda.
rm
tidak mengambil input, dibutuhkan argumen. Ini berbeda. Argumen adalah sakelar dan nama file dan seterusnya yang Anda berikan ke program di baris perintah untuk memengaruhi perilakunya. Input adalah data tempat program bekerja. Misalnya, grep
mengambil input dan argumen:
grep "foo" file.txt
Ada dua argumen di sana "foo"
dan file.txt
. masukan adalah konten dari file.txt
, bukan string file.txt
diri. Karena grep menerima masukan, Anda dapat menggunakannya dengan pipa:
cat file.txt | grep "foo"
menghasilkan output yang sama, karena cat mengambil file.txt
sebagai argumen, dan menghasilkan konten dari file.txt
sebagai keluaran. Keluaran itu kemudian disalurkan ke grep, memberikan efek yang sama seperti membuat grep membuka file itu sendiri, seperti pada contoh pertama.
Jika Anda ingin menggunakan output dari satu program sebagai argumen ke yang lain, Anda menggunakan backticks:
rm `which gem`
atau sintaks alternatif (khusus bash) ini:
rm $(which gem)
Edit:atau xargs
seperti yang ditunjukkan oleh penjawab lain. Banyak cara untuk menguliti kucing dengan baris perintah.
Lihat man
halaman perintah yang Anda minati. Program ini akan menunjukkan bahwa mereka membaca dari stdin
(coba man grep
untuk perintah populer yang bertuliskan stdin).