Komut satırı argümanları ve standart girdi arasında bir ayrım vardır. Bir boru bir işlemin standart çıkışını diğerinin standart girişine bağlar. Yani
ls | echo
Ls'nin standart çıkışını, standart yankı girişine bağlar. İyi değil mi? Eh, echo standart girdiyi yok sayar ve komut satırı argümanlarını - bu durumda hiçbiri - kendi stdout'una atar. Çıktı: hiçbir şey.
Bu durumda birkaç çözüm var. Birincisi, kedi gibi stdin okuyan ve stdout'a dökülen bir komut kullanmaktır.
ls | cat
İş tanımınızın ne olduğuna bağlı olarak 'çalışacaktır'.
Ama genel davadan ne haber? Gerçekten istediğiniz şey bir komutun stdout'unu diğerinin komut satırı argümanlarına dönüştürmektir. Diğerlerinin de söylediği gibi, xargs
bu durumda kurallı yardımcı araçtır, komut satırını stdin'den bir komut için çıkar ve çalıştırmak için komutlar oluşturur.
ls | xargs echo
Bunu ayrıca ikame komutunu kullanarak da dönüştürebilirsiniz. $()
echo $(ls)
Ayrıca ne istersen onu yapardım.
Bu araçların her ikisi de kabuk komut dosyası yazmak için oldukça temeldir;
Bütünlük için, soruda belirtildiği gibi, stdin'i komut satırına dönüştürmenin diğer temel yolu kabuğun yerleşik read
komutudur. IFS
Herhangi bir komut çalıştırmasında kullanabileceğiniz " değişkenleri " ( değişken tarafından tanımlanan kelimeler ) temp değişkenine dönüştürür.
ls | echo
umuyorsun? neden sadece koşmuyorsunls
?