2012-10-17 63 views
2


我有两个shell脚本,说script1.sh和script2.sh。我从script1.sh调用script2.sh。在script2.sh中,完成了一些评估,并根据结果设置标志。现在我需要将该标志传递给script1.sh,以此来决定script1.sh是否应该继续执行或退出。我没有使用函数。而当我导出标志,在script1.sh中它是空白的。
我现在的问题是如何从script2.sh返回标志?
有帮助吗?有任何想法吗?经验分享?将子shell脚本的值返回给父脚本

回答

1

我希望你(由语句exit {value} SE)

例如使用返回代码从script2.sh

./script2.sh 

$?包含script2.sh的退出声明中的返回值。

这里不能使用exportexport使变量可用于后续子进程。它不能用于将值传递回父进程,因为您正在修改特定于子进程的变量副本。

3

你可以打印出结果并捕捉它SCRIPT1:

# Script 1 
flag="$(./script2.bash)" 

和:

# Script 2 
[...] 
printf '%s\n' "$flag" 

希望这有助于=)

+0

我宁愿这个解决方案。请记住,非零退出状态通常表示错误; 'script2.bash'可能有几个不同的非错误条件,导致'script1.bash'的不同标志值。 – chepner

+0

你知道解决方案返回多个值而不是一个? – Amir

+0

我通常将它们作为一个值返回,并用变量中不存在的分隔符分隔。然后我使用'cut'将返回值分成多个值。因此,在脚本2中,我会做类似于:'printf'%s,%s \ n'“$ var1”“$ var2”'(请注意''printf'格式字符串中的'''分隔符')。然后在脚本1我会做:'single_value =“$(./ script1.bash)”'后面跟着'var1 =“$(echo”$ single_value“| cut -f1 -d',')”'' var2 =“$(echo $ single_value”| cut -f2 -d',')“'。'-d'指定分隔符(在本例中为''''),'-f'指定哪个字段。希望这有助于=) –

1

只需使用SCRIPT2的退出状态:

if script2.sh ; then 
    echo Exited with zero value 
else 
    echo Exited with non zero 
fi 

在script2中使用exit 0exit 1来设置标志。

相关问题