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

问题描述 投票:0回答:1

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

例如,如果变量${log_file}为空,则输出不应转到文件中,而应转到stdout。我应该如何设置${log_file}变量值以使其输出到stdout

我尝试设置为&1stdout文件描述符)

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
bash shell file-descriptor
1个回答
0
投票

您基于变量的值有两个根本不同的操作:

  1. 重定向both stderr和stdout到指定的文件
  2. 也不要重定向。

没有语法可以处理这种二分法。我建议以下内容:

  1. 将命令的输出包装在函数中。

    func () {
        echo var
    }
    
  2. 根据需要使用if语句调用带有或不带有重定向的函数。

  3. 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
© www.soinside.com 2019 - 2024. All rights reserved.