나는 다음 줄을 가지고 있습니다 :
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
.