私は次の行を持っています:
trap 'jobs -p | xargs kill -9' SIGINT SIGTERM EXIT
私が持っている多くのbashシェルスクリプトで繰り返し発生します。
このコードを共有する最良の方法は何ですか? Bash関数を呼び出すことはできますか?
実際、私はフレームワークを作成しており、ユーザーはいくつかのグルシェルスクリプトを書く必要があります。ユーザーのシェルスクリプトが何らかの方法でネイティブシェルスクリプトから継承できる場合は良いでしょう。あるいは、既存の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
。