Bash脚本-stdout文件描述符



我的脚本中有以下内容:

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

OUTFILE是一个实际的文件路径时,它工作得很好。然而,有时我希望通过修改OUTFILE来查看stdout上的输出,但它不起作用。我尝试了1&1,它们都是带引号的和不带引号的,也都是空的
它一直在告诉我:

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

使用/dev/stdout作为文件名。(请参阅">/dev/stdout"的可移植性。)

由于解析顺序问题,不能在变量中使用&1。在执行变量扩展之前,会搜索重定向令牌以查找。所以当你使用:

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

外壳扫描重定向运算符并且看到CCD_ 7重定向运算符而不是CCD_。(而且一开始没有>>&运算符,所以不管怎样,你的附加示例都不起作用。尽管bash的新版本确实有一个&>>运算符供>> file 2>&1使用。)

我猜你想做其中一个

打印到文件

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

打印到标准输出

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

或者只是

echo "foo"

打印到文件和stdout

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

最新更新