在shell脚本中使用tee的stdout和stderr重定向

时间:2012-10-17 16:55:33

标签: function unix stdout io-redirection tee

我尝试使用以下代码将输出/错误打印到控制台和日志文件。

FUN1(){

回声"在fun1"

FUN2

VAR = 5

}

FUN2(){

回声"在fun2"

}

fun1 2>& 1 | tee -a testlog.txt

echo $ var#printing null value

任何方式在fun1执行后打印var的值为5?我需要在控制台和日志文件中输出。另外fun1应该只执行一次。

请帮忙。

1 个答案:

答案 0 :(得分:0)

如果您将其写为bash脚本,则可以:

#!/bin/bash

exec 3>&1 1> >(tee testlog.txt) 2>&1

fun1(){
    echo 'inside fun1'
    fun2
    var=5
}

fun2(){
    echo 'inside fun2'
}

fun1
echo "$var"

如果您希望将其作为普通的bourn shell,可以将其分为两个脚本:

script2.sh:

#!/bin/sh

fun1(){
    echo 'inside fun1'
    fun2
    var=5
}

fun2(){
    echo 'inside fun2'
}

fun1
echo $var

和script1.sh:

#!/bin/sh

script2.sh 2>&1 | tee testlog.txt