Substituição para xargs -d em osx


22

No Linux, você pode xargs -d,executar rapidamente o hostnamecomando em quatro servidores diferentes com nomes sequenciais, da seguinte maneira:

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

Parece que o comando OSX xargs não suporta o parâmetro delimitador. Você pode obter o mesmo resultado com um formato diferente echoou através de algum outro utilitário de linha de comando?

Respostas:


11

E se:

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

De man xargs:

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

1
Se os valores puderem conter espaços, linhas de alimentação ou tabulações, você pode usar algo parecido printf 'a\0a' | xargs -0 -n1 echo.
Lri 18/10/12

44

Como alternativa, você sempre pode instalar o GNU xargsatravés do Homebrew e do findutilspacote GNU .

Instale o Homebrew:

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

Siga as instruções. Em seguida, instale o findutils:

brew install findutils

Isso fornecerá o GNU xargscomo gxargse você pode usar a sintaxe à qual está acostumado no GNU / Linux. O mesmo vale para outros comandos básicos encontrados no pacote findutils, como gfindor glocateou gupdatedb, que possuem diferentes versões do BSD no OS X.


Obrigado! Fiz isso e adicionei o caminho ao meu .zshrc(conforme explicado na saída da instalação) para não precisar usar o gprefixo.
absynce

2

Se você deseja que ele seja executado em paralelo, use o GNU Parallel:

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

1

Você também pode usar trno OSX para converter as vírgulas em novas linhas e usar xargs para enumerar cada item da seguinte maneira:

echo -n 1,2,3,4 | tr -s ',' '\n' | xargs -I{} ssh root@www{}.example.com hostname
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.