Перенаправление stdoutt и stderr с использованием tee в сценарии оболочки

Я пытаюсь распечатать вывод / ошибку в консоль и файл журнала, используя приведенный ниже код.

fun1 () {

echo "inside fun1"

fun2

переменная = 5

}

fun2 () {

echo "inside fun2"

}

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

echo $ var # печать нулевого значения

Любой способ напечатать значение var как 5 после выполнения fun1?? Мне нужен вывод как в консоли, так и в файле журнала. Также fun1 должен выполняться только один раз.

пожалуйста помоги.

1 ответ

Если вы напишите это как скрипт 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, вы можете разделить ее на два сценария:

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
Другие вопросы по тегам