我正在使用echo var >> "${log_file}" 2>&1
将stdout
重定向并stderr
到存储在${log_file}
中的文件路径。但是当变量为空时,我想将stdout
和stderr
发送到其默认/标准位置。
例如,如果变量${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