Executa o resultado da string do shell script como um conjunto de comandos shell

4

Eu crio um resultado de string do meu shell script e quero executá-lo como shell command .

Por exemplo, file_a é:

[email protected]
[email protected]

script:

awk '{print "mail -s \"welcome\"", $1}' file_a

E resultado:

mail -s "welcome" [email protected]
mail -s "welcome" [email protected]

Então eu quero executar o resultado como um conjunto de comandos shell.

    
por Navid Farhadi 27.02.2012 / 11:14

5 respostas

3

Você quer examinar o comando eval.

eval $(awk '{print "mail -s \"welcome\"", $1}' file_a)

EDITAR: Você está certo @ manatwork - eval como demonstrei não funcionaria realmente para várias linhas. Eu estava tentando responder a pergunta de Navid quando ele perguntou, mas na verdade eu não deveria ter tido medo de perguntar por que ele não estava apenas usando um loop for, por exemplo:

for m in $(<file_a); do mail -s welcome $m
    
por 27.02.2012 / 11:48
2

Algumas maneiras:

  • grava a saída do awk em um arquivo, torna o arquivo executável e, em seguida, o executa
  • use a função system () no script awk:
por 27.02.2012 / 11:51
2

Diretamente lendo e executando o comando no bash.

for i in '<file_a'; do mail -s "welcome" $i; done
    
por 27.02.2012 / 16:26
2

Você pode jogar com xargs.

xargs - build and execute command lines from standard input

E um exemplo de casal é assim

awk '{print "mail -s \"welcome\"", $1}' file_a | xargs -0 bash -c
    
por 27.02.2012 / 22:23
1

Você pode canalizar o resultado de àwk para bash :

awk '{print "mail -s \"welcome\"", $1}' file_a | bash

Mas tenha cuidado com a saída do primeiro comando, como se file_a contivesse algumas linhas complicadas, você poderia executar comandos indesejados.

    
por 27.02.2012 / 22:16