Seu shell analisa qualquer linha de comando em uma determinada seqüência. Quando encontra $APP $OPTS $OUTPUT
, não há operador de pipe; mais tarde essas variáveis são expandidas e |
aparece, mas não tem um significado especial porque já é tarde demais para isso.
O resultado pode ser reavaliado com eval
(sua resposta mostra que você já descobriu isso), mas eval
pode se tornar para ser um evil
incorretamente .
Sua abordagem original é falha porque as variáveis do shell não devem conter código. Funções são para código. Exemplo:
app=/usr/bin/myapp
opts=--gzip
output() { ssh root@remotemachine "cat > /path/to/output/file.gz"; }
$app $opts | output
Nota é uma boa prática usar nomes de variáveis em minúsculas .