从另一个脚本中获取shell脚本并检查返回码

时间:2013-05-21 11:44:36

标签: bash shell

我想从另一个脚本中获取文件,例如name.sh,并检查返回代码并确定它的错误代码。如果我使用

source name.sh

然后如果name.sh返回非零返回码我的主脚本停止运行但我需要决定退出代码天气继续或停止。

如果我使用

ret_code="`source name.sh`"
echo $ret_code

然后ret_code为null并且不打印错误代码。 我不能用这些:

sh name.sh
./name.sh
bash name.sh

因为name.sh不可执行,我不希望它是可执行的

3 个答案:

答案 0 :(得分:14)

运行sh name.sh无需执行文件。而不是使用$?

sh name.sh
ret_code=$?

答案 1 :(得分:7)

返回码应该在变量$?中。您可以执行以下操作:

source name.sh         # Execute shell script
ret_code=$?            # Capture return code
echo $ret_code

答案 2 :(得分:1)

Amin,name.sh的返回值只是执行的最后一个命令的返回值。像往常一样使用$?访问它。

捕获返回代码的最简单方法是构造“name.sh”,以便失败的命令导致不再执行命令(可能会成功然后屏蔽错误)。由于您使用的是bash,因此您也可以使用函数。只需将您的逻辑移动到一个函数中并调用它。这样,您的name.sh就变成了一行,$?的值将是函数返回的任何值。

例如:

# cat fred
function f() {complicated; logic; here; export FRED="asdf";return 1;}
f
# source fred
# echo $?
1
# echo $FRED
asdf

但是,如果您将逻辑放入函数中,那么您也可以获取文件,然后在闲暇时调用该函数。

# cat fred
function f() {complicated; logic; here; export FRED="asdf";return 1;}
# source fred
# f && echo "that worked!" || echo "failed again"
failed again
# echo $FRED
asdf