Bash脚本继承?从另一个脚本调用函数?

Bash脚本继承?从另一个脚本调用函数?

我有这一行:

trap 'jobs -p | xargs kill -9' SIGINT SIGTERM EXIT

它在我拥有的许多 bash shell 脚本中重复出现。

共享此代码的最佳方式是什么?我可以调用 bash 函数吗?

实际上,我正在创建一个框架,并且用户将需要编写一些粘合 shell 脚本。如果用户的 shell 脚本能够以某种方式从基本 shell 脚本继承,那就太好了。或者他们可以以某种方式调用预先存在的 bash 函数。

问题如果我创建一个像这样的 bash 函数:

// a.sh
function trap_and_kill_child_jobs {
    trap 'jobs -p | xargs kill -9' SIGINT SIGTERM EXIT
}

并从另一个脚本中调用它,如下所示:

// b.sh
source ./a.sh
trap_and_kill_child_jobs
sh -c 'sleep 10000 &' &   # I want this process to be killed by `trap_and_kill_child_jobs`
./run-some-tests.js

调用者脚本 ( b.sh) 执行以下操作不是实际经历陷阱。 b.sh 创建的“子作业”将继续运行。

答案1

创建一个包含框架函数的脚本文件就足够了,如下所示:

/tmp/framework.sh

# Define a serie of functions of your framework...
function framework_function_1() {
    echo "function 1 executed"
}

function framework_function_2() {
    echo "function 2 executed"  
}

# And put here anything you want to be executed right away (like the trap)
echo "framework.sh was executed"

然后将其包含在其余脚本中,如下所示:

/tmp/b.sh

# Include the framework:
.  /tmp/framework.sh

echo "Script b.sh was executed"
# Calling a framework's function
framework_function_2

这样,b.sh(以及包括framework.sh在内的任何其他脚本)的执行将如下所示:

$ /tmp/b.sh 
framework.sh was executed
Script b.sh was executed
function 2 executed

请注意,. /tmp/framework.sh与 相同source /tmp/framework.sh

相关内容