Bash脚本中的下面一行
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
给我这个错误:
line 46: ${OUPUT_RESULTS}: ambiguous redirect
Why?
Bash脚本中的下面一行
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
给我这个错误:
line 46: ${OUPUT_RESULTS}: ambiguous redirect
Why?
当前回答
对于我的例子,如果我通过env指定输出文件(例如$ENV_OF_LOG_FILE),那么将得到错误模糊重定向。
但是,如果我使用纯文本作为文件路径(例如/path/to/log_file),那么就没有错误。
其他回答
你有一个名为OUPUT_RESULTS的变量吗?还是更可能是OUTPUT_RESULTS?
michael@isolde:~/junk$ ABC=junk.txt
michael@isolde:~/junk$ echo "Booger" > $ABC
michael@isolde:~/junk$ echo "Booger" >> $ABB
bash: $ABB: ambiguous redirect
michael@isolde:~/junk$
如果脚本的重定向包含一个变量,并且脚本主体在括号括起来的部分中定义了该变量,则会得到"ambiguous redirect"错误。这里有一个可重复的例子:
Vim a.sh来创建脚本 编辑脚本包含(logit="/home/ubuntu/test.log" && echo "a") >> ${logit} Chmod +x a.sh使其可执行 a.sh
如果你这样做,你会得到“/home/ubuntu/a.sh: line 1: $logit: ambiguous redirect”。这是因为
在括号之间放置一列命令会导致子shell ,并且其中的每个命令都将在其中执行 子shell,无需删除非导出变量。因为列表是 在子shell中执行时,变量赋值不会保持有效 在subshell完成之后。”
从使用括号对表达式进行分组和展开
为了纠正这个问题,你可以在步骤2中修改脚本,定义圆括号外的变量:logit="/home/ubuntu/test.log" && (echo "a") >> $logit
在我的例子中,这是一个有用的警告,因为目标变量(不是文件)拼写错误并且不存在。
echo "ja" >> $doesNotExist
导致
./howdy.sh: line 4: $doesNotExist: ambiguous redirect
在尝试使用大括号展开将输出写入多个文件时,我得到了此错误。
例如:echo "text" > {f1,f2}.txt将导致-bash: {f1,f2}.txt:模糊重定向
在这种情况下,使用tee输出到多个文件:
echo "text" | tee {f1,f2,...,fn}.txt 1>/dev/null
1>/dev/null将阻止将文本写入标准输出
如果你想追加到文件中,使用tee -a
我刚刚在bash脚本中出现了这个错误。问题是在前一行的末尾出现了一个意外的\错误。