17

В Linux вы можете использовать xargs -d, чтобы быстро запустить команду hostname четырех разных серверов с последовательными именами следующим образом:

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

Похоже, что команда OSX xargs не поддерживает параметр разделителя. Можете ли вы достичь того же результата с другим форматированием echo или с помощью какой-либо другой утилиты командной строки?

3 ответа3

37

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

Установите 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.

10

Как насчет:

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

Если вы хотите, чтобы он работал параллельно, используйте GNU Parallel:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .