Por que essa atribuição de variável não funciona ao usar tee?

0

Considere:

$ FILE_NAME='(cat somefile | head -1)' | tee -a dump.txt
$ echo $FILE_NAME

$ 
  1. Agora, por que a saída de (cat somefile | head -1) não alcança a entrada padrão do tee ..?
  2. Se a saída alcançou tee, então poderia copiá-lo para o arquivo dump.txt e a saída padrão.
  3. Além disso, a variável $FILE_NAME não recebe o valor.
por Kent Pawar 11.04.2013 / 18:12

1 resposta

3

Você provavelmente quis escrever

FILE_NAME='(cat somefile | head -1) | tee -a dump.txt'
echo $FILE_NAME

(ou head -1 somefile para se livrar do gato)

O tubo externo 'é mais um erro lógico. Você esperaria que fosse um erro de sintaxe, mas não é assim que o Bash funciona, simplesmente não dá o resultado esperado.

Compare também sem a atribuição de variáveis:

$ echo hello > somefile
$ '(cat somefile | head -1)' | tee -a dump.txt
bash: hello: command not found

A primeira linha de somefile não é ecoada para stdout, mas interpretada como um comando. Como o comando não pode ser executado, o tee não obtém a saída e não é realmente executado, pois não há nenhum pipe para fazer.

    
por 11.04.2013 / 18:44