我有几个脚本:
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/