ฉันคิดว่าสิ่งนี้สามารถทำเพื่อคุณ?
eval $(printf 'ping "%s" & ' host1 host2 host3)
มันใช้ประโยชน์จากprintf
ความสามารถในการ "ทำให้ซ้ำอัตโนมัติ" ข้อโต้แย้งของมันในขณะที่ใช้สตริงรูปแบบของมันมากกว่าแต่ละอาร์กิวเมนต์ printf
ดังนั้นข้างต้นจะสร้างลำดับของping <hostname> &
สตริงสำหรับแต่ละโฮสต์ที่จัดไว้ให้เป็นอาร์กิวเมนต์และดึงข้อมูลลำดับของคำสั่งดังกล่าวผ่านการทดแทนeval
คำสั่งไปยังคำสั่งเพื่อให้พวกเขาดำเนินการทันที
printf
และeval
คำสั่งเป็นมาตรฐาน POSIX เช่นเดียวกับการทดแทนคำสั่ง
ล้อมรอบคำสั่งดังกล่าวทั้งหมดใน subshell ประกอบด้วยและ -ed wait
เช่นนี้:
(eval $(printf 'ping "%s" & ' host1 host2 host3) && wait)
Ctrl+Cให้ความสามารถในทุกอย่างที่จะขัดจังหวะด้วยง่าย
มิฉะนั้นคุณสามารถควบคุมแต่ละping
คำสั่งอย่างแปลกประหลาดผ่านการควบคุมงานตามปกติของเชลล์
หากเชลล์ของคุณรองรับการทดแทนกระบวนการด้วยคุณอาจใช้สิ่งต่อไปนี้:
. <(printf 'ping "%s" & ' host1 host2 host3)
เพื่อให้พิมพ์ได้ไม่กี่ตัวอักษร
ส่วนสำคัญเป็นเช่นเดียวกับสำหรับeval
แต่ฟีดลำดับของping
s ไปยังคำสั่ง.
(aka source
) ผ่านการทดแทนกระบวนการ