Penggantian untuk xargs -d di osx


22

Di Linux, Anda dapat menggunakan xargs -d,untuk menjalankan hostnameperintah dengan cepat terhadap empat server berbeda dengan nama sekuensial sebagai berikut:

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

Sepertinya perintah xargs OSX tidak mendukung parameter pembatas. Bisakah Anda mencapai hasil yang sama dengan diformat berbeda echo, atau melalui beberapa utilitas baris perintah lainnya?

Jawaban:


11

Bagaimana tentang:

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

Dari man xargs:

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

1
Jika nilainya dapat berisi spasi, umpan garis, atau tab, Anda bisa menggunakan sesuatu seperti printf 'a\0a' | xargs -0 -n1 echo.
Lri

44

Atau, Anda selalu dapat menginstal GNU xargsmelalui Homebrew dan findutilspaket GNU .

Instal Homebrew:

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

Ikuti petunjuk. Kemudian instal findutils:

brew install findutils

Ini akan memberi Anda GNU xargssebagai gxargs, dan Anda dapat menggunakan sintaks yang biasa Anda gunakan dari GNU / Linux. Hal yang sama berlaku untuk perintah dasar lain yang ditemukan dalam paket findutils seperti gfindatau glocateatau gupdatedb, yang memiliki rekan BSD yang berbeda pada OS X.


Terima kasih! Saya melakukan ini, kemudian menambahkan path ke saya .zshrc(seperti yang dijelaskan dalam output instalasi) jadi saya tidak perlu menggunakan gawalan.
absynce

2

Jika Anda ingin dijalankan secara paralel, gunakan GNU Parallel:

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

1

Anda juga dapat menggunakan trOSX untuk mengonversi koma ke baris baru dan menggunakan xargs untuk menghitung melalui setiap item sebagai berikut:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.