以下命令在命令行有效,但作为脚本失败:
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
您不能将重定向指定为变量字符串值的一部分。
当您直接在命令行上输入某些内容时,shell 会对输入进行一些额外的评估,而对于字符串值则不会发生这种情况。>>
只是 的另一个参数gunzip
。
$ CMD="echo >> foo"
$ $CMD
>> foo
您可以改用eval
。在示例中,eval $CMD
将正确地将echo
输出重定向到文件foo
。请注意,这可能会引发意外输入的问题。