Zamiennik dla xargs -d w osx


22

W systemie Linux można użyć xargs -d,do szybkiego uruchomienia hostnamepolecenia na czterech różnych serwerach o następujących po sobie nazwach:

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

Wygląda na to, że polecenie xargs OSX nie obsługuje parametru separatora. Czy możesz osiągnąć ten sam wynik za pomocą innego sformatowania echolub innego narzędzia wiersza polecenia?

Odpowiedzi:


11

Co powiesz na:

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

Od man xargs:

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

1
Jeśli wartości mogą zawierać spacje, linie lub tabulatory, możesz użyć czegoś takiego printf 'a\0a' | xargs -0 -n1 echo.
Lri

45

Alternatywnie, zawsze możesz zainstalować GNU xargspoprzez Homebrew i findutilspakiet GNU .

Zainstaluj Homebrew:

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

Postępuj zgodnie z instrukcją. Następnie zainstaluj findutils:

brew install findutils

To da ci GNU xargsas gxargsi będziesz mógł użyć składni, do której jesteś przyzwyczajony z GNU / Linux. To samo dotyczy innych podstawowych poleceń znalezionych w pakiecie findutils, takich jak gfindlub glocatelub gupdatedb, które mają różne odpowiedniki BSD w OS X.


Dziękuję Ci! Zrobiłem to, a następnie dodałem ścieżkę do mojego .zshrc(jak wyjaśniono w danych wyjściowych instalacji), aby nie musiałem używać gprzedrostka.
absynce

2

Jeśli chcesz, aby działał równolegle, użyj GNU Parallel:

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

1

Możesz także użyć trw OSX do konwersji przecinków na nowe linie i użyć xargs do wyliczenia każdego elementu w następujący sposób:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.