我有下面的父脚本调用子脚本。
parent.sh
#!/bin/bash
export home=`pwd`
echo "calling child"
. ${home}/bin/child.sh
retn_code=$?
if (retn_code -ne 0)
then
exit $retn_code
else
echo "successful"
fi
exit 0
child.sh:
#!/bin/bash
exit 1
当我执行父脚本时,父脚本中没有捕获1的退出状态。打印的日志的最后一行是"呼叫孩子"。并且log中在此之后没有打印任何行。
是否有什么我错过了,而从孩子到父母的退出状态?
.
不调用子进程,而是运行它的代码。因此,如果子脚本调用exit
,父脚本退出。你要做的是:
#!/bin/bash
home=$(pwd)
echo "calling child"
if "${home}"/bin/child.sh; then
echo success
else
exit # status returned by child will propagate
fi
exit 0
注意,这里使用变量home
是非常奇怪的。如果您想在child.sh中定义它,在我看来,写if home=$(pwd) ./bin/child.sh; then ...
会更清楚。您使用export
意味着您希望在child.sh中定义它,但我怀疑您实际上并不想这样做。这与问题无关,所以我只是删除了我认为不必要的导出。