group 命令{ list; }
应该在当前 shell 环境中执行 list。
这允许变量分配之类的东西在命令组(http://mywiki.wooledge.org/BashGuide/CompoundCommands)之外可见。
我用它将输出发送到日志文件和终端:
{ { echo "Result is 13"; echo "ERROR: division by 0" 1>&2; } | tee -a stdout.txt; } 3>&1 1>&2 2>&3 | tee -a stderr.txt;
关于主题“将标准输出和标准错误传递到 shell 脚本中的两个不同进程?” 在此处阅读:将 stdout 和 stderr 管道传输到 shell 脚本中的两个不同进程?.
{ echo "Result is 13"; echo "ERROR: division by 0" 1>&2; }
模拟输出到 stdout 和 stderr 的命令。
我也想评估退出状态。/bin/true
并/bin/false
模拟可能成功或失败的命令。所以我尝试保存$?
到一个变量r
:
~$ r=init; { /bin/true; r=$?; } | cat; echo $r;
init
~$ r=init; { /bin/true; r=$?; } 2>/dev/null; echo $r;
0
正如你所看到的,上面的管道结构没有设置变量r
,而第二个命令行导致了预期的结果。这是一个错误还是我的错?谢谢。
我使用以下 bash 版本测试了 Ubuntu 12.04.2 LTS ( ~$
) 和 Debian GNU/Linux 7.0 (wheezy) ( ):~#
~$ echo $BASH_VERSION
4.2.25(1)-release
~# echo $BASH_VERSION
4.2.37(1)-release