Замена для 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
Если значения могут содержать пробелы, переводы строки или табуляции, вы можете использовать что-то вроде printf 'a\0a' | xargs -0 -n1 echo.
Lri

45

Кроме того, вы всегда можете установить GNU xargsчерез Homebrew и findutilsпакет GNU .

Установите Homebrew:

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

Следуй инструкциям. Затем установите findutils:

brew install findutils

Это даст вам GNU xargsas gxargs, и вы сможете использовать синтаксис, к которому вы привыкли из GNU / Linux. То же самое касается других базовых команд, найденных в пакете findutils, таких как gfindили glocateили gupdatedb, которые имеют разные аналоги BSD в OS X.


Спасибо! Я сделал это, затем добавил путь к моему .zshrc(как объяснено в выводе установки), чтобы мне не пришлось использовать gпрефикс.
возрождение

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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.