庆典如何杀死父进程,或退出父进程从在bash脚本模块的功能

问题描述 投票:0回答:1

我有几个脚本:

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运行到下一个步骤。有没有办法来解决这个问题呢?

我意识到它的发生是由于分配步骤值= $(工作)。但是,有没有办法就在这种情况下终止函数调用中止执行?

linux bash process signals kill
1个回答
0
投票

我不相信,这种行为应该被描述为一个“问题”。正如你提到的,当你在一个子shell调用work,下班aborting只是中止子shell。这是正确的,预期的行为。幸运的是,在work子shell返回的值是提供给家长,这样你就可以简单地把它和写响应:

value=$(work) || exit

如果work返回一个非零值,则该脚本将与同一非零值退出。

© www.soinside.com 2019 - 2024. All rights reserved.