使用变量的Stdout和Stderr重定向

时间:2019-11-19 17:25:48

标签: bash shell variables stdout stderr

我正在尝试在脚本中创建2个变量以将错误和输出重定向到文件,并仅在屏幕上显示错误,而其他变量仅在屏幕上显示输出。当我把它作为一个变量不起作用。变量为空。有帮助吗?

#!/bin/bash
timestamp="`date +%Y%m%d%H%M%S`"
displayonlyerror="2>&1 >> /tmp/postinstall_output_$timestamp.log | tee -a /tmp/postinstall_output_$timestamp.log"
displayoutput="2>&1 |tee -a /tmp/postinstall_output_$timestamp.log"

echo "No screen session found" $displayoutput
ech "No screen session found" $displayerror

1 个答案:

答案 0 :(得分:1)

它不会那样工作,shell在对其他令牌执行扩展之前会解析重定向。相反,将displayonlyerrordisplayoutput定义为类似函数(file是日志文件名,您可以对其进行更改):

displayonlyerror() {
    "$@" 2>&1 >>file | tee -a file
}

displayoutput() {
    "$@" 2>&1 | tee -a file
}

并像这样使用它们:

displayoutput cmd args
displayonlyerror cmd args