获取“模糊redirect”错误
在我的Bash脚本中的以下行
echo $AAAA" "$DDDD" "$MOL_TAG >> ${OUPUT_RESULTS}
给我这个错误:
line 46: ${OUPUT_RESULTS}: ambiguous redirect
为什么?
Bash有时候可能很呆板。
下面的命令都返回不同的错误消息,基本上是相同的错误:
$ echo hello > bash: syntax error near unexpected token `newline` $ echo hello > ${NONEXISTENT} bash: ${NONEXISTENT}: ambiguous redirect $ echo hello > "${NONEXISTENT}" bash: : No such file or directory
在variables周围添加引号似乎是处理“模棱两可的redirect”消息的好方法:当你犯了一个input错误时,你往往得到一个更好的信息 – 当错误是由于文件名中的空格造成的,使用引号是修复。
你有一个名为OU PUT_RESULTS
的variables,还是更可能是OUT PUT_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$
把你的variables的引号。 如果碰巧有空格,它也会给你“模棱两可的redirect”。 也检查你的拼写
echo $AAAA" "$DDDD" "$MOL_TAG >> "${OUPUT_RESULTS}"
例如模棱两可的redirect
$ var="file with spaces" $ echo $AAAA" "$DDDD" "$MOL_TAG >> ${var} bash: ${var}: ambiguous redirect $ echo $AAAA" "$DDDD" "$MOL_TAG >> "${var}" $ cat file\ with\ spaces aaaa dddd mol_tag
$ {OUPUT_RESULTS}中指定的path是否包含任何空格字符? 如果是这样,你可能要考虑使用... >> "${OUPUT_RESULTS}"
(使用引号)。
(您可能还想考虑将您的variables重命名为${OUTPUT_RESULTS}
)
我最近发现,redirect文件名称中的空白将导致“模棱两可的redirect”消息。
例如,如果您redirect到application$(date +%Y%m%d%k%M%S).log
并且指定了错误的格式化字符,则redirect将在上午10点之前失败。 但是,如果您使用application$(date +%Y%m%d%H%M%S).log
它将成功。 这是因为%k
格式在9AM产生' 9'
,其中%H
在9AM产生'09'
。
echo $(date +%Y%m%d%k%M%S)
给出20140626 95138
echo $(date +%Y%m%d%H%M%S)
给出20140626095138
错误的date可能会给出类似的东西:
echo "a" > myapp20140626 95138.log
以下是所期望的:
echo "a" > myapp20140626095138.log
我只是有一个bash脚本中的这个错误。 这个问题在上一行的结尾是一个偶然的错误。
另外一个可能导致“模棱两可的redirect”的东西是\t
\n
\r
也在你写的variables名中
也许不是\n\r
? 但是在谨慎的方面犯错
尝试这个
echo "a" > ${output_name//[$'\t\n\r']}
我在parsingHTML,Tabs \t
的时候碰到了这一行。