여러 스크립트에서 함수를 재사용하는 방법은 무엇입니까?

여러 스크립트에서 함수를 재사용하는 방법은 무엇입니까?

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디렉토리가 있습니다 . 이러한 라이브러리 스크립트 중 일부는 대화형 셸에서 쉽게 사용할 수 있습니다.PATHsource

관련 정보