我想运行一个子功能(通过读取等一些交互式操作)并保留它的日志。
原始
#!/bin/bash
foo() {
echo "Error"
return 1
}
bar() {
local data
read -p "data=" data
echo "OK: $data"
return 0
}
foo
echo "Return code=$?"
bar
echo "Return code=$?"
保留日志后
#!/bin/bash
foo() {
echo "Error"
return 1
}
bar() {
local data
read -p "data=" data
echo "OK: $data"
return 0
}
LOG=my.log
foo | tee -a $LOG
echo "Return code=$?"
bar | tee -a $LOG
echo "Return code=$?"
答案 0 :(得分:0)
使用命名管道发送返回值:
#!/bin/bash
foo() {
echo "Error"
return 1
}
bar() {
echo "OK"
return 0
}
rm -f retcode
trap 'rm -f retcode' EXIT
mkfifo retcode
LOG=my.log
{
foo
echo $? > retcode
} | tee -a $LOG &
read rc < retcode
echo "Return code=$rc"
{
bar
echo $? > retcode
} | tee -a $LOG &
read rc < retcode
echo "Return code=$rc"
答案 1 :(得分:0)
使用流程替换来运行tee
。这利用了>(...)
内的进程的返回码丢失的事实。
#!/bin/bash
foo() {
echo "Error"
return 1
}
bar() {
echo "OK"
return 0
}
LOG=my.log
foo > >(tee -a $LOG )
echo "Return code=$?"
bar > >( tee -a $LOG )
echo "Return code=$?"