为什么在使用失败的命令替换值导出变量时不设置-e工作?

时间:2017-04-05 04:00:19

标签: bash

我想在echo "after VAR=$VAR"行之前退出此脚本,fails-sometimes.sh退出非0代码。

#!/bin/bash
set -eux
echo "before"
export VAR=$(./fails-sometimes.sh)
echo "after VAR=$VAR"

此处的“-e”选项不会停止脚本。 我该怎么写呢?

1 个答案:

答案 0 :(得分:3)

set -e在此处不起作用,因为export命令仍然成功。这是set -e完成预期的几个示例之一,但是not really what you'd expect

一般来说,避免将exportlocal和类似的赋值与命令替换一起使用是一种很好的做法,因为它们会抑制替换的退出代码。喜欢split it into two separate commands

export VAR
VAR=$(./fails-sometimes.sh)

如果命令替换失败,那么第二个命令将会失败(因此会因set -e而退出脚本)。