ฉันพยายามใช้ xargs เพื่อรันคำสั่งสำหรับแต่ละอาร์กิวเมนต์ที่ให้ แต่น่าเสียดายที่แฟล็ก --replace / -I ดูเหมือนจะไม่ทำงานอย่างถูกต้องเมื่อเชื่อมต่อกับ -n ดูเหมือนว่า {} จะขยายไปสู่รายการอาร์กิวเมนต์ทั้งหมดที่อ่านจาก stdin โดยไม่คำนึงถึงตัวเลือก -n
น่าเสียดายที่ตัวอย่างทั้งหมดบนเว็บดูเหมือนจะเป็นคำสั่ง (mv, cp, rm) ซึ่งจะใช้อาร์กิวเมนต์หลายตัวที่ {} ถูกขยาย
ตัวอย่างเช่นเมื่อทำงาน:
echo a b c d | xargs -n 1 -I {} echo derp {}
ผลลัพธ์คือ:
derp a b c d
แต่ฉันคาดว่า:
derp a
derp b
derp c
derp d
อย่างไรก็ตามการรันโดยไม่มี -I {} จะทำให้ได้ผลลัพธ์ที่ต้องการ:
echo a b c d | xargs -n 1 echo derp
derp a
derp b
derp c
derp d
มีวิธีใดบ้างที่จะบรรลุเป้าหมายนี้ด้วย xargs? ความตั้งใจสูงสุดของฉันคือการใช้มันเพื่อเรียกใช้หลายรอบ (parralel) ssh เช่น
echo server{1..90} | xargs -n 1 -P 0 -I {} ssh {} 'echo $SOME_HOST_INFO'
ฉันกำลังใช้งานxargs (GNU findutils) 4.4.2
RHEL 6.3
man xargs
เปิด-I
: Also, unquoted blanks do not terminate input items; instead the separator is the newline character. Implies -x and -L 1.
ดังนั้นจึงทำงานตามที่ออกแบบไว้
xargs
แต่ไม่xargs
GNU