Expansão da shell para argumentos?

1

Por exemplo:

mkdir ~/{1,2,3}

Cria diretórios ~/1 , ~/2 e ~/3 . Isso equivale a:

mkdir ~/1
mkdir ~/2
mrdir ~/3

Mas, usando a mesma sintaxe no caso de CMD < argument > :

brew {install, update, doctor}

... é um absurdo interpretado pelo shell. Isso não significa:

brew install
brew update
brew doctor

É fácil criar um script rápido, mas deve ser mais simples usando expansão ou substituição no bash. O que estou perdendo?

Executando Bash 3.2.57(1)-release em OS X 10.10.2

    
por njboot 01.04.2015 / 07:51

3 respostas

5

xargs parece ser o que você quer:

echo install update doctor | xargs -n1 brew
    
por 01.04.2015 / 08:34
1

Escape o primeiro espaço e remova os outros espaços:

$ printf "'%s'\n" brew\ {install,update,doctor}
'brew install'
'brew update'
'brew doctor'

Se brew for um comando, apenas escreva (também sem os espaços):

brew {install,update,doctor}

como com o seu exemplo mkdir:

mkdir {install,update,doctor}

Você não precisa de nenhum processo ou tubulação externa para fazer isso; tudo pode ser feito no seu bash shell.

    
por 01.04.2015 / 08:34
1

Que tal (observe as barras invertidas, todas importantes):

echo brew\ {install,update,doctor}\;| bash

o primeiro padrão (argumentos para echo ) se expandirá assim:

echo brew install; brew update; brew doctor;

que é então ecoado, produzindo esta saída:

brew install; brew update; brew doctor;

que nós canalizamos para uma nova instância do bash.

    
por 01.04.2015 / 14:19