Jawaban:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
Bagian yang sulit adalah bahwa xargs melakukan pemanggilan subkulit implisit. Di sini dia dipanggil secara eksplisit dan pipa tidak menjadi bagian dari conveyor induk
cat foo.bar | wc -l
dancat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-I
alih-alih -J
; tidak ada -J
pilihan untuk xargs
xargs
memiliki -J
opsi yang setara dengan -i
linuxxargs
-J
tidak didefinisikan dalam POSIX tetapi -I
adalah dan memiliki penggunaan yang berbeda dari GNU.)
Jika Anda ingin memproses semua baris foo.txt, Anda harus menggunakan loop. Gunakan &
untuk menempatkan proses ke latar belakang
while read line; do
echo $line | bar.sh &
done < foo.txt
Jika input Anda berisi spasi untuk sementara, setel pemisah bidang internal ke baris baru
# save the field separator
OLD_IFS=$IFS
# new field separator, the end of line
IFS=$'\n'
for line in $(cat foo.txt) ; do
echo $line | bar.sh &
done
# restore default field separator
IFS=$OLD_IFS
xargs
OP yang digunakan.