gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 11:55:06 29 4
gpt4 key购买 nike

我有几个脚本:

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/

29 4 0
文章推荐: html - 当在 FF 和 IE 中的表格单元格内时,具有百分比高度的
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com