สำหรับ exmaple ใช้คำสั่ง
cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
foo.txtมีสองบรรทัด
foo
bar
คำสั่งข้างต้นพิมพ์อะไร
สำหรับ exmaple ใช้คำสั่ง
cat foo.txt | xargs -I{} -n 1 -P 1 sh -c "echo {} | echo"
foo.txtมีสองบรรทัด
foo
bar
คำสั่งข้างต้นพิมพ์อะไร
คำตอบ:
cat foo.txt | xargs -J % -n 1 sh -c "echo % | bar.sh"
ส่วนที่ยุ่งยากคือ xargs ทำการร้องขอ subshell โดยปริยาย ที่นี่จะเรียกอย่างชัดเจนและท่อจะไม่กลายเป็นส่วนหนึ่งของการลำเลียงหลัก
cat foo.bar | wc -lและcat foo.bar | xargs -J % -n 1 sh -c "echo % | wc -l"
-Iแทนที่จะ-J; ไม่มี-Jตัวเลือกในการ xargs
xargsมี-Jตัวเลือกที่เทียบเท่ากับ-ilinuxxargs
-Jไม่ได้กำหนดใน POSIX แต่-Iเป็นและมีการใช้งานที่แตกต่างจาก GNU)
หากคุณต้องการประมวลผลทุกบรรทัดของ foo.txt คุณจะต้องใช้การวนซ้ำ ใช้&เพื่อทำให้กระบวนการเป็นพื้นหลัง
while read line; do
echo $line | bar.sh &
done < foo.txt
หากอินพุตของคุณมีช่องว่างตั้งตัวคั่นฟิลด์ภายในเป็นบรรทัดใหม่ชั่วคราว
# 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
xargsOP ที่ใช้