2

Следующее работает из командной строки, но не работает как скрипт:

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

Следующие строки скрипта:

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

произвести следующий вывод - командная строка gunzip выглядит так, как должна:

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

Однако выдаем командную строку из скрипта:

$UZPCMD

отправляет строку за строкой разархивированного файла на стандартный вывод (как если бы перенаправление игнорировалось).

1 ответ1

4

Вы не можете указать перенаправление как часть строкового значения переменной.

Оболочка выполняет некоторую дополнительную оценку ввода, когда вы вводите что-то непосредственно в командной строке, а для строковых значений этого не происходит. >> это просто еще один аргумент в пользу gunzip .

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

Вместо этого вы можете использовать eval . В этом примере eval $CMD правильно перенаправит вывод echo в файл foo . Обратите внимание, что это может привести к проблемам с неожиданным вводом.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .