我想记录脚本的输出;因此,我使用tee。但是,我很难在花括号之外携带变量。例如:
{
# do something
result=$?
} 2>&1 | tee -ia /var/log/action.log
exit $result
如何返回花括号内设置的正确值?
非常感谢!
问题不是大括号,而是管道。用流程替换替换它,问题消失了。用bash表示(该问题最初被标记为):
#!/usr/bin/env bash
# ^^^^- NOT sh
{
# do something
result=$?
} > >(tee -ia /var/log/action.log) 2>&1
exit "$result"
在POSIX sh
中,您可能会得到类似以下内容:
#!/bin/sh
tempdir=$(mktemp -d "${TMPDIR:-/tmp}/myprogram.XXXXXX") || exit
mkfifo "$tempdir/fifo" || exit
tee -ia /var/log/action.log <"$tempdir/fifo" &
{
# ...other code here...
result=$?
} >"$tempdir/fifo" 2>&1
rm -rf "$tempdir"
exit "$result"