Bash에서는 가끔 여러 스크립트에서 함수를 재사용하고 싶을 때가 있습니다. 모든 스크립트에서 함수 정의를 반복하는 것은 나쁘지 않나요? 그렇다면 좋은 사례가 있나요?
다음 접근 방식이 좋은 생각입니까?
- 함수의 정의를
myfunction
자체 스크립트로 래핑합니다define_myfunction.sh
. - 함수를 호출하는 스크립트에서는
source define_myfunction.sh
가 함수를 호출합니다myfunction arg1 arg2 ...
.
감사해요.
답변1
에서 bash
그것은 좋은 접근 방식입니다. 그렇습니다.
source
"라이브러리" 스크립트를 사용하거나 가져오면 .
둘 이상의 스크립트 간에 함수 정의를 공유하려는 문제를 적절하게 해결할 수 있습니다. "라이브러리" 스크립트에 정의된 함수에 액세스해야 하는 모든 스크립트는 아마도 스크립트 상단에 필요한 파일을 얻게 됩니다.
이를 통해 단일 "라이브러리" 스크립트에서 관련 기능을 수집하고 해당 기능에 액세스할 수 있습니다.
전혀 관련이 없는 것은 아니지만 bash
쉘은 비대화형 쉘(예: 스크립트)을 실행할 때 자동으로 파일을 얻을 수도 있습니다. 이는 스크립트에 대한 특정 환경을 설정하는 데 사용할 수 있습니다.
BASH_ENV="$HOME/stuff/script.env" ./myscript
...where script.env
에서는 함수 정의, 셸 또는 환경 변수 설정, 다른 파일 가져오기 등 모든 작업을 수행할 수 있습니다.
일부 셸(예 ksh93
: )에는 이러한 함수 정의 스크립트가 포함될 수 있는 디렉터리를 가리키는 환경 변수가 있습니다. 에서는 ksh93
변수를 이라고 합니다 FPATH
. 스크립트에는 사용자가 명령줄(또는 스크립트 내)에 입력할 때 자동으로 발견되는 $FPATH/foo
함수가 포함됩니다 foo
. foo
내가 아는 한, 쉘에는 bash
이러한 특정 기능이 없습니다.
다른 쉘에는 다른 형태의 "자동 로딩" 기능이 있습니다.
답변2
이 질문은 주관적이라고 분류될 수 있지만 매번 바퀴를 다시 만드는 대신 라이브러리를 사용하여 자주 사용되는 코드를 저장하는 것이 일반적으로 허용되는 모범 사례라고 생각합니다. source
함수와 변수를 정의하는 스크립트는 이를 수행하는 쉘 방식이므로 그렇다고 말하고 싶습니다. source
아마도 라이브러리 스크립트를 갖고 사용하는 것이 좋은 습관일 것입니다.
실제로 한 단계 더 나아가서 자주 사용하는 도구와 스크립트가 포함된 bin
디렉토리가 있습니다 . 이러한 라이브러리 스크립트 중 일부는 대화형 셸에서 쉽게 사용할 수 있습니다.PATH
source