Bash脚本 - stdout文件描述符?

时间:2016-04-05 10:15:51

标签: bash stdout

我的脚本中有以下内容:

OUTFILE=./output.log
echo "foo" >> ${OUTFILE}

OUTFILE是实际文件路径时,它可以正常工作。但是,有时我想通过修改OUTFILE来查看stdout上的输出,但它不起作用。我尝试使用引用和不引用的1&1,并将其留空。
它一直告诉我这个:

./foo.sh: line 2: ${OUTFILE}: ambiguous redirect

2 个答案:

答案 0 :(得分:3)

我猜你想要做其中一个

打印到文件

OUTFILE=./output.log
echo "foo" >> "${OUTFILE}"

打印到标准输出

OUTFILE=/dev/stdout
echo "foo" >> "${OUTFILE}"

或只是

echo "foo"

打印到文件和标准输出

OUTFILE=./output.log
echo "foo" | tee  "${OUTFILE}"

答案 1 :(得分:2)

使用/dev/stdout作为您的文件名。 (参见Portability of “> /dev/stdout”。)

由于解析订单问题,您无法在变量中使用&1。在执行变量扩展之前,搜索重定向令牌。所以当你使用:

$ o='&1'
$ echo >$o

shell扫描重定向运算符并看到>重定向运算符而不是>&运算符。 (并且无论如何都没有>>&运算符,因此您的附加示例无论如何都无效。虽然较新版本的bash确实有&>>运算符用于>> file 2>&1。)