bash:如何在花括号内返回值[duplicate]

问题描述 投票:0回答:1

我想记录脚本的输出;因此,我使用tee。但是,我很难在花括号之外携带变量。例如:

{
  # do something
  result=$?
} 2>&1 | tee -ia /var/log/action.log

exit $result

如何返回花括号内设置的正确值?

非常感谢!

sh curly-braces
1个回答
1
投票

问题不是大括号,而是管道。用流程替换替换它,问题消失了。用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"
© www.soinside.com 2019 - 2024. All rights reserved.