带重定向的脚本命令行失败

带重定向的脚本命令行失败

以下命令在命令行有效,但作为脚本失败:

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。请注意,这可能会引发意外输入的问题。

相关内容