19

我想从另一个脚本中获取一个文件,例如 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 是不可执行的,我不希望它是可执行的

4

3 回答 3

15

文件不需要是可执行文件才能运行sh name.sh。比使用$?.

sh name.sh
ret_code=$?
于 2013-05-21T11:49:37.440 回答
9

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

source name.sh         # Execute shell script
ret_code=$?            # Capture return code
echo $ret_code
于 2013-05-21T11:48:25.833 回答
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
于 2017-07-25T19:12:03.610 回答