Linux: Como avaliar o conteúdo de STDOUT?

4

Considere que você tem um arquivo com algum tipo de comando de terminal. Como cada linha pode ser executada? Você pode canalizar a saída de mais em eval ?

%> more ./foo.txt

Editar:

Depois de alguma ajuda / orientação dos comentários, acho que também devo notar que já faz um tempo desde que eu fiz qualquer shell script, então enquanto eu digo eval eu posso dizer echo ou alguma outra maneira de executar código.

Se foo.txt contiver várias linhas de código, mas eu quero executar a linha que contém echo 'bar bar' , eu estou procurando uma maneira de fazer isso, digamos um grep . Algo logicamente semelhante a:

grep echo foo.txt | xargs echo
    
por vol7ron 15.04.2013 / 16:21

1 resposta

5

Se você precisar avaliar apenas todas as linhas de um arquivo, não será necessário um redirecionamento eval ou stdout complicado. Duas opções fáceis:

  • Origem do arquivo ( source filename.sh ou . filename.sh ).
  • Torne o arquivo executável e execute-o ( chmod +x filename.sh; ./filename.sh )

Se você realmente precisar de eval de cada linha de um arquivo em um loop, faça isso com while :

while IFS= read -r line; do eval "$line"; done < filename.sh

Você também pode canalizar a saída de qualquer comando para while :

grep foo filename.sh | while IFS= read -r line; do eval "$line"; done

Se você precisar passar algo para source (ou . ), que espera um nome de arquivo como argumento, você pode usar processo de substituição :

source <( grep foo filename.sh )
    
por 15.04.2013 / 16:26

Tags