Substituição de xargs -d em osx

16

No Linux, você pode usar xargs -d, para executar rapidamente o comando hostname em quatro servidores diferentes com nomes sequenciais da seguinte forma:

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

Parece que o comando xargs do OSX não suporta o parâmetro delimitador. Você consegue o mesmo resultado com um echo formatado de maneira diferente ou por meio de algum outro utilitário de linha de comando?

    
por Chase Seibert 28.08.2012 / 03:55

3 respostas

10

Que tal:

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.
    
por 28.08.2012 / 04:56
36

Alternativamente, você sempre pode instalar o GNU xargs através do Homebrew e do pacote GNU findutils .

Instale o Homebrew:

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

Siga as instruções. Então instale findutils:

brew install findutils

Isso lhe dará GNU xargs as gxargs , e você pode usar a sintaxe a que você está acostumado a partir do GNU / Linux. O mesmo vale para outros comandos básicos encontrados no pacote findutils, como gfind ou glocate ou gupdatedb , que têm diferentes contrapartes BSD no OS X.

    
por 28.08.2012 / 10:52
1

Se você quer rodar em paralelo, use o GNU Parallel:

parallel ssh root@www{}.example.com hostname ::: {1..4}
    
por 03.01.2013 / 01:18

Tags