linux - bash 如何终止父进程,或从 bash 模块脚本中的函数退出父进程

标签 linux bash process signals kill

我有几个脚本:

functions.sh - 定义了许多函数,包括 work() 和 abort() 它看起来像这样:

#!/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 中获取该文件以提供所有函数。 Parent 可以调用任何函数,functions.sh 中的任何函数都可以调用 abort,此时 parent 的执行应该停止,但它没有发生,parent.sh 运行到下一步。有没有办法解决这个问题?

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

最佳答案

我不认为这种行为应该被描述为“问题”。正如您所指出的,当您在子 shell 中调用 work 时,aborting from work 只会中止子 shell。这是正确的预期行为。幸运的是,子 shell 中 work 返回的值可供父级使用,因此您可以简单地响应它并编写:

value=$(work) || exit

如果 work 返回非零值,则脚本将以相同的非零值退出。

关于linux - bash 如何终止父进程,或从 bash 模块脚本中的函数退出父进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54636458/

相关文章:

linux - ubuntu utf-8 转换器脚本

powershell - 尝试通过 PowerShell 脚本查找并终止进程

php - 在*nix中,什么原因导致top命令中出现 "sleeping"?

linux - 创建一个在压缩时会失败的文件

linux - 在 Bash shell 中获取和使用带有特殊字符的密码

Bash:所有子文件夹上的 Tab 文件名完成

bash - 在bash中使用awk计算sacct输出的列数

c - 零线程进程?

javascript - 如果浏览器关闭,则执行所有 ajax 请求

python - 如何从一个文件中获取在另一个文件中包含字符串的所有行?