A linha de comando com script com o redirecionamento falha

2

O seguinte funciona a partir da linha de comando, mas falha como script:

gunzip -c /disk1/hadoop/gunzip_tmp/in/part-00006.gz >> /disk1/hadoop/gunzip_tmp/outfile.000

As seguintes linhas de script:

UZPCMD="gunzip -c "$TMPDIR"/in/"$FILEONLY" >> "$TMPDIR"/outfile.000"
echo $TMPDIR
echo $FILEONLY
echo $UZPCMD

produza a seguinte saída - a linha de comando gunzip parece como deveria:

/disk1/hadoop/gunzip_tmp
part-00006.gz
gunzip -c /disk1/hadoop/gunzip_tmp/in/part-00006.gz >> /disk1/hadoop/gunzip_tmp/outfile.000

No entanto, emitindo a linha de comando do script:

$UZPCMD

envia linha após linha do arquivo descompactado para stdout (como se o redirecionamento estivesse sendo ignorado).

    
por MarkP 14.02.2012 / 21:30

1 resposta

4

Você não pode especificar o redirecionamento como parte do valor da string da variável.

O shell faz alguma avaliação adicional na entrada quando você insere algo diretamente na linha de comando, e isso não acontece para valores de string. >> é apenas outro argumento para gunzip .

$ CMD="echo >> foo"
$ $CMD
>> foo

Você pode usar eval . No exemplo, eval $CMD redirecionaria corretamente a saída echo para o arquivo foo . Observe que isso pode introduzir problemas com entradas inesperadas.

    
por 14.02.2012 / 21:47