Usando a substituição de comandos para executar vários comandos

2

O que estou tentando fazer no bash é escrever um script, foo , que quando executo $(foo) , ele altera o diretório e executa um script usando source . O conteúdo de foo :

echo cd bar
echo "&&"
echo source baz

Quando executo $(foo) , ele altera o diretório para "bar", mas não executa source baz . Existe alguma maneira de conseguir isso?

    
por Kevin Marsolais 06.02.2013 / 22:38

2 respostas

2

Você precisa eval da saída:

eval $(foo)

Caso contrário, && (ou qualquer outro elemento de linguagem semelhante) é tratado como se estivesse entre aspas: um argumento regular para cd .

$ echo $(foo)
cd bar && source baz

Ignorando o primeiro echo , isso executaria cd com os quatro argumentos bar && source baz , descartando silenciosamente todos, exceto o primeiro.

    
por 06.02.2013 / 23:14
0

Você pode usar aliases (ver também: man bash ) para fazer o que você está tentando fazer.

alias foo='cd bar && source baz'

mudará o diretório para bar e a fonte baz quando você executar foo.

    
por 06.02.2013 / 23:15