배쉬 4.4.20을 사용하고 있습니다. 나는 일반적으로 모든 bash 스크립트에 주요 기능을 가지고 있습니다. 다른 bash 스크립트의 다른 함수에서 이 스크립트를 가져오려는 경우 두 스크립트의 기본 함수 정의와 충돌합니까?
#A.sh
main() {
SomeFunction
}
SomeFunction(){
. B.sh
}
main "$@"
#B.sh
main(){
echo Hi
}
main "$@"
주요 기능의 이름을 바꾸지 않고 해결책이 있습니까?
답변1
또 다른 스크립트가 재정의됩니다 main()
. 그렇습니다. 이 특별한 경우에는 main()
스크립트 A가 실행되는 동안 스크립트 B가 함수를 재정의하므로 이것이 중요한지 잘 모르겠습니다 . 쉘이 이미 실행 중인 함수의 동작을 재정의하도록 허용하는지 의심됩니다.
즉, 다음 스크립트가 제공됩니다.
$ cat a.sh
main() {
echo a1
. ./b.sh
echo a2
}
main "$@"
$ cat b.sh
main() {
echo b
}
main "$@"
어떤 쉘에서든 실행하면 print , , a.sh
를 찾을 수 있습니다 . 다시 호출 하면 물론 새로운 동작이 발생합니다.a1
b
a2
a.sh
main
그러나 여기서는 중요하지 않더라도 이와 같은 함수를 동적으로 재정의하는 것은 최소한 혼란스러울 것입니다.
더 좋은 질문은, 왜 당신이 필요합니까?원천첫 번째 스크립트 B? B를 조달을 통해 로드될 함수 모음(일종의 라이브러리)으로 생각하는 것이 더 명확해 보입니다.또는소스가 아닌 일반 프로그램이라고 하는 독립 실행형 유틸리티로 취급합니다.
첫 번째 경우 A는 필요에 따라 A에 정의된 함수를 명시적으로 호출합니다.
답변2
짧은 답변 예
긴 대답 스크립트를 얻으면 스크립트를 실행하는 것과 동일하지만 자체 쉘 프로세스에서 수행됩니다. 따라서 환경변수, 함수명 등이 공유됩니다. 바라보다https://superuser.com/a/176788/222230