แทนที่ xargs -d ใน osx


22

ใน Linux คุณสามารถใช้xargs -d,เพื่อรันhostnameคำสั่งกับเซิร์ฟเวอร์ที่แตกต่างกันสี่เครื่องที่มีชื่อเรียงลำดับดังนี้:

echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname

ดูเหมือนว่าคำสั่ง OSX xargs ไม่สนับสนุนพารามิเตอร์ตัวคั่น คุณสามารถบรรลุผลลัพธ์เดียวกันด้วยการจัดรูปแบบที่แตกต่างกันechoหรือผ่านยูทิลิตี้บรรทัดคำสั่งอื่นได้หรือไม่

คำตอบ:


11

เกี่ยวกับ:

echo {1..4} | xargs -n1 -I{} ssh root@www{}.example.com hostname

จากman xargs:

-n number
Set the maximum number of arguments taken from standard input for each invocation of utility.

1
ถ้าค่าสามารถมีช่องว่าง linefeeds printf 'a\0a' | xargs -0 -n1 echoหรือแท็บคุณสามารถใช้สิ่งที่ต้องการ
Lri

44

หรือคุณสามารถติดตั้ง GNU xargsผ่านทางHomebrewและfindutilsแพ็คเกจGNU ได้ตลอดเวลา

ติดตั้ง Homebrew:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

ทำตามคำแนะนำ. จากนั้นติดตั้ง findutils:

brew install findutils

สิ่งนี้จะให้ GNU xargsเป็นgxargsคุณและคุณสามารถใช้ไวยากรณ์ที่คุณคุ้นเคยจาก GNU / Linux เดียวกันจะไปสำหรับคำสั่งพื้นฐานอื่น ๆ ที่พบใน findutils แพคเกจเช่นgfindหรือglocateหรือgupdatedbที่มีลูกน้อง BSD แตกต่างกันใน OS X ได้


ขอขอบคุณ! ฉันทำสิ่งนี้แล้วเพิ่มพา ธ ไปยัง.zshrc(ตามที่อธิบายในเอาต์พุตการติดตั้ง) ดังนั้นฉันไม่ต้องใช้gคำนำหน้า
absynce

2

หากคุณต้องการให้มันทำงานแบบขนานให้ใช้ GNU Parallel:

parallel ssh root@www{}.example.com hostname ::: {1..4}

1

คุณยังสามารถใช้trใน OSX เพื่อแปลงเครื่องหมายจุลภาคเป็นบรรทัดใหม่และใช้ xargs เพื่อแจกแจงผ่านแต่ละรายการดังนี้:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.