สำหรับ 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
ตัวเลือกที่เทียบเท่ากับ-i
linuxxargs
-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
xargs
OP ที่ใช้