我正在使用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
您基于变量的值有两个根本不同的操作:
没有语法可以处理这种二分法。我建议以下内容:
将命令的输出包装在函数中。
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