Перенаправление 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