如何将标准输出文件描述符放入变量中?



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

例如,如果变量${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

根据变量的值,您有两种根本不同的操作:

  1. 将 stderr 和 stdout重定向到命名文件
  2. 也不要重定向。

没有语法来处理这种二分法。我会推荐以下内容:

  1. 将您可能希望将其输出重定向到函数中的命令包装起来。

    func () {
    echo var
    }
    
  2. 根据需要,使用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

相关内容

  • 没有找到相关文章

最新更新