如何将标准输出文件描述符放入变量中?
How to put stdout file descriptor in a variable?
我正在使用 echo var >> "${log_file}" 2>&1
将 stdout
和 stderr
重定向到存储在 ${log_file}
中的文件路径。但是当变量为空时,我想将 stdout
和 stderr
发送到它们的 default/standard 位置。
例如,如果变量 ${log_file}
为空,则输出不应转到文件,而应转到 stdout
。我应该如何设置 ${log_file}
变量值以使其输出到 stdout
?
我尝试设置为 &1
(stdout
文件描述符)
if [[ -z "${log_file}" ]]; then
log_file=&1
fi
echo var >> "${log_file}" 2>&1
但是没有用,bash 抛出了这个错误:
No such file or directory
1: command not found
你有两个基于变量值的根本不同的操作:
- 重定向 stderr 和 stdout 到命名文件
- 也不要重定向。
没有处理这种二分法的语法。我会推荐以下内容:
将您可能希望重定向其输出的命令包装在一个函数中。
func () {
echo var
}
根据需要使用 if
语句在有或没有重定向的情况下调用该函数。
if [ -n "$log_file" ]; then
func >> "$log_file" 2>&1
else
func
fi
另一种方法是有条件地定义func
,将重定向直接附加到函数。
if [ -n "$log_file" ]; then
func () {
echo var
} >> "$log_file" 2>&1
else
func () {
echo var
}
fi
func
我正在使用 echo var >> "${log_file}" 2>&1
将 stdout
和 stderr
重定向到存储在 ${log_file}
中的文件路径。但是当变量为空时,我想将 stdout
和 stderr
发送到它们的 default/standard 位置。
例如,如果变量 ${log_file}
为空,则输出不应转到文件,而应转到 stdout
。我应该如何设置 ${log_file}
变量值以使其输出到 stdout
?
我尝试设置为 &1
(stdout
文件描述符)
if [[ -z "${log_file}" ]]; then
log_file=&1
fi
echo var >> "${log_file}" 2>&1
但是没有用,bash 抛出了这个错误:
No such file or directory
1: command not found
你有两个基于变量值的根本不同的操作:
- 重定向 stderr 和 stdout 到命名文件
- 也不要重定向。
没有处理这种二分法的语法。我会推荐以下内容:
将您可能希望重定向其输出的命令包装在一个函数中。
func () { echo var }
根据需要使用
if
语句在有或没有重定向的情况下调用该函数。if [ -n "$log_file" ]; then func >> "$log_file" 2>&1 else func fi
另一种方法是有条件地定义func
,将重定向直接附加到函数。
if [ -n "$log_file" ]; then
func () {
echo var
} >> "$log_file" 2>&1
else
func () {
echo var
}
fi
func