Bash 스크립트 상속? 다른 스크립트에서 함수를 호출하시나요?

Bash 스크립트 상속? 다른 스크립트에서 함수를 호출하시나요?

나는 다음 줄을 가지고 있습니다 :

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.

관련 정보