Заміна для xargs -d в osx


22

В Linux можна скористатися xargs -d,для швидкого запуску hostnameкоманди на чотирьох різних серверах із послідовними іменами, як описано нижче:

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

Схоже, команда xargs OSX не підтримує параметр роздільника. Чи можете ви досягти того ж результату за допомогою іншого форматування 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.
Лрі

45

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

Встановити домашню мову:

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.


Дякую! Я зробив це, потім додав шлях до мого .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.