GNU/Linux >> Belajar Linux >  >> Linux

Memahami bagaimana input dikirim ke pipa di Bash

"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).


Linux
  1. Cara menggunakan perintah riwayat Bash

  2. Bash Script - Cara Membaca Input Pengguna

  3. Bagaimana cara membagi string dengan tanda kutip (seperti argumen perintah) di bash?

  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Bagaimana Cara Melakukan `head` Dan `tail` Pada Input Null-delimited Di Bash?

  3. Bagaimana Cara Mendeteksi Bash>=4.0?

  1. Cara menulis loop di Bash

  2. Cara menggunakan input dalam skrip shell Anda

  3. Pastikan setidaknya ada dua argumen yang diberikan dalam skrip bash