Bash 脚本 - 标准输出文件描述符?
Bash script - stdout file descriptor?
我的脚本中有以下内容:
OUTFILE=./output.log
echo "foo" >> ${OUTFILE}
当 OUTFILE
是实际文件路径时,它工作得很好。但是,有时我想通过修改 OUTFILE
来查看 stdout 上的输出,但它不起作用。我尝试使用 1
和 &1
,包括引号和不引号,并将其留空。
它一直告诉我这个:
./foo.sh: line 2: ${OUTFILE}: ambiguous redirect
我猜你想做其中之一
打印到文件
OUTFILE=./output.log
echo "foo" >> "${OUTFILE}"
打印到标准输出
OUTFILE=/dev/stdout
echo "foo" >> "${OUTFILE}"
或者只是
echo "foo"
打印到文件和标准输出
OUTFILE=./output.log
echo "foo" | tee "${OUTFILE}"
使用 /dev/stdout
作为文件名。 (参见Portability of “> /dev/stdout”。)
由于解析顺序问题,您不能在变量中使用 &1
。在执行 变量扩展之前搜索重定向标记以查找 。所以当你使用:
$ o='&1'
$ echo >$o
shell 扫描重定向运算符并看到 >
重定向运算符而不是 >&
运算符。 (并且无论如何都没有 >>&
运算符开始,因此您的附加示例无论如何都不会工作。尽管 bash 的较新版本确实有一个 &>>
运算符 >> file 2>&1
使用。)
我的脚本中有以下内容:
OUTFILE=./output.log
echo "foo" >> ${OUTFILE}
当 OUTFILE
是实际文件路径时,它工作得很好。但是,有时我想通过修改 OUTFILE
来查看 stdout 上的输出,但它不起作用。我尝试使用 1
和 &1
,包括引号和不引号,并将其留空。
它一直告诉我这个:
./foo.sh: line 2: ${OUTFILE}: ambiguous redirect
我猜你想做其中之一
打印到文件
OUTFILE=./output.log
echo "foo" >> "${OUTFILE}"
打印到标准输出
OUTFILE=/dev/stdout
echo "foo" >> "${OUTFILE}"
或者只是
echo "foo"
打印到文件和标准输出
OUTFILE=./output.log
echo "foo" | tee "${OUTFILE}"
使用 /dev/stdout
作为文件名。 (参见Portability of “> /dev/stdout”。)
由于解析顺序问题,您不能在变量中使用 &1
。在执行 变量扩展之前搜索重定向标记以查找 。所以当你使用:
$ o='&1'
$ echo >$o
shell 扫描重定向运算符并看到 >
重定向运算符而不是 >&
运算符。 (并且无论如何都没有 >>&
运算符开始,因此您的附加示例无论如何都不会工作。尽管 bash 的较新版本确实有一个 &>>
运算符 >> file 2>&1
使用。)