Ada perbedaan antara argumen baris perintah dan input standar. Sebuah pipa akan menghubungkan output standar dari satu proses ke input standar lainnya. Begitu
ls | echo
Menghubungkan output standar ls ke input standar echo. Baik kan? Yah, gema mengabaikan input standar dan akan membuang argumen baris perintahnya - yang tidak ada dalam kasus ini ke - stdout sendiri. Outputnya: tidak ada sama sekali.
Ada beberapa solusi dalam hal ini. Salah satunya adalah dengan menggunakan perintah yang membaca stdin dan dump ke stdout, seperti cat.
ls | cat
Akan 'bekerja', tergantung pada definisi pekerjaan Anda.
Tapi bagaimana dengan kasus umumnya. Yang Anda inginkan adalah mengonversi stdout dari satu perintah ke baris perintah yang lain. Seperti yang dikatakan orang lain, xargs
adalah alat bantu kanonik dalam kasus ini, membaca baris perintahnya untuk meminta perintah dari stdinnya, dan menyusun perintah untuk dijalankan.
ls | xargs echo
Anda juga dapat mengonversi beberapa ini, menggunakan perintah substitusi $()
echo $(ls)
Akan juga melakukan apa yang Anda inginkan.
Kedua alat ini cukup inti untuk skrip shell, Anda harus mempelajari keduanya.
Untuk kelengkapan, seperti yang Anda tunjukkan dalam pertanyaan, cara dasar lain untuk mengonversi stdin ke command line args adalah read
perintah builtin shell . Itu mengkonversi "kata-kata" (kata-kata seperti yang didefinisikan oleh IFS
variabel) ke variabel temp, yang dapat Anda gunakan dalam menjalankan perintah apa pun.
ls | echo
? mengapa tidak lari sajals
?