Замена для xargs -d в osx
В Linux вы можете использовать xargs -d,
быстро запустить hostname
Команда против четырех разных серверов с последовательными именами следующим образом:
echo -n 1,2,3,4 |xargs -d, -I{} ssh root@www{}.example.com hostname
Похоже, что команда OSX xargs не поддерживает параметр разделителя. Можете ли вы достичь того же результата с другим форматом echo
или через какую-то другую утилиту командной строки?
3 ответа
Как насчет:
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.
Кроме того, вы всегда можете установить GNU xargs
через доморощенный и 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.
Вы также можете использовать tr
в OSX для преобразования запятых в новые строки и использования xargs для перечисления каждого элемента следующим образом:
echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
Если вы хотите, чтобы он работал параллельно, используйте GNU Parallel:
parallel ssh root@www{}.example.com hostname ::: {1..4}
С printf
$ printf '%s\n' 1 2 3 4 | xargs -I{} echo ssh root@www{}.example.com hostname
ssh root@www1.example.com hostname
ssh root@www2.example.com hostname
ssh root@www3.example.com hostname
ssh root@www4.example.com hostname