我有几个脚本:
functions.sh - 有定义的许多功能,包括工作()和中止(),它看起来是这样的:
#!/bin/bash
abort()
{
message=$1
echo Error: $message ..Aborting >log
exit 7
}
work()
{
cp ./testfile ./test1 #./testfile doesnt exist so non zero status here
if [ $? -eq 0 ];then
echo "variable_value"
else
abort "Can not copy"
fi
}
parent.sh - 父脚本是主要的脚本,它看起来像这样:
#!/bin/sh
. ./functions.sh
value=$(work)
echo "why is this still getting printed"
基本上我有在functions.sh文件的功能很多,而我在采购该parent.sh文件,以使所有可用的功能。家长可以调用任何功能和functions.sh任何功能可以拨打家长的这点执行中止应该停止,但它没有发生,parent.sh运行到下一个步骤。有没有办法来解决这个问题呢?
我意识到它的发生是由于分配步骤值= $(工作)。但是,有没有办法就在这种情况下终止函数调用中止执行?
我不相信,这种行为应该被描述为一个“问题”。正如你提到的,当你在一个子shell调用work
,下班aborting
只是中止子shell。这是正确的,预期的行为。幸运的是,在work
子shell返回的值是提供给家长,这样你就可以简单地把它和写响应:
value=$(work) || exit
如果work
返回一个非零值,则该脚本将与同一非零值退出。