父脚本称为子脚本。子脚本设置一些变量,并以错误代码退出。调用脚本是否可以保留子脚本中设置的变量?在这种情况下,child.sh
无法被修改。
我尝试将source
与|| true
组合在一起,但是没有用。
parent.sh
source ./child.sh || true
echo "testvar = $testvar"
child.sh
echo "In child script."
testvar="foo"
echo "testvar = $testvar"
exit 1
输出:
$ ./parent.sh
In child script.
testvar = foo
所需的输出:
$ ./parent.sh
In child script.
testvar = foo
testvar = foo
答案 0 :(得分:2)
否,这是不可能的。而是,防止脚本退出。
通常可以通过覆盖exit
来做到这一点:
$ cat parent.sh
shopt -s expand_aliases
alias exit=return
source ./child.sh
unalias exit
echo "testvar = $testvar"
执行后,脚本将被诱骗到return
中:
$ bash parent.sh
In child script.
testvar = foo
testvar = foo
答案 1 :(得分:1)
如Felix所说:exit 1
将终止外壳。
但是您可以激活EXIT
Trap:
#!/bin/bash
function cleanup {
echo "testvar = ${testvar}"
}
trap cleanup EXIT
source ./child.sh
将导致:
In child script.
testvar = foo
testvar = foo
答案 2 :(得分:0)
尝试在来源return
中使用exit
代替child.sh
。
这可能就是您所需要的。
$: cat parent.sh
echo "in parent, pre child"
source ./child.sh
echo "in parent, post child"
echo "parent: testvar = $testvar"
$: cat child.sh
echo "In child script."
testvar="foo"
echo "child: testvar = $testvar"
return 1
echo never this
$: parent.sh
in parent, pre child
In child script.
child: testvar = foo
in parent, post child
parent: testvar = foo