한 스크립트를 다른 스크립트에서 재사용하는 방법은 무엇입니까?

한 스크립트를 다른 스크립트에서 재사용하는 방법은 무엇입니까?

다른 스크립트 B에서 스크립트 A를 재사용하는 방법에는 두 가지가 있습니다. 올바른가요?

언제 어떤 방법을 사용해야 하는지 알고 싶습니다.

둘 다 작동할 수 있는 경우에도 어떤 이유로 선호됩니까?

감사해요.

답변1

두 가지 방법 모두 유효하지만 매우 다릅니다.

스크립트 B 내에서 스크립트 A를 사용하면(명령으로 호출) 스크립트 A만 사용하여 스크립트 B 없이 스크립트 A가 수행할 수 있는 모든 작업을 수행할 수 있습니다.

스크립트 A의 작업 부분을 함수로 이동하여 일종의 라이브러리로 바꿀 수 있습니다. 그런 다음 스크립트 A 자체는 여러 함수를 정의하는 것 외에는 아무 작업도 수행하지 않으며, 다른 스크립트는 이를 가져와 함수 자체를 사용해야 합니다.

두 방법 모두 완전히 유효하며 둘 다 매우 드문 경우는 아닙니다. 어떤 것을 사용할지는 전적으로 스크립트 A가 처음에 수행하고 있던 작업, 해당 작업을 계속해야 하는지 여부(이 경우 이를 라이브러리로 전환하는 것은 의문의 여지가 없음1 ) , 파생될 수 있는 스크립트 B보다 더 많은 스크립트가 있는지 여부에 따라 달라집니다. A-as-a-library의 이점을 누릴 수 있는 스크립트 기능이 제공됩니다.

제삼분명히 가능성은 스크립트 A와 B의 모든 공통 비트를 스크립트 C의 함수에 넣는 것입니다. 그런 다음 스크립트 C는 함수 라이브러리로 작동하고 다른 두 스크립트는 먼저 이를 가져와 사용합니다. 극단적인 경우에는 일부 명령줄 구문 분석 및 기타 관리 작업(예: 입력 및 출력 파일 구성 등)을 제외하고 A와 B 중 하나 또는 둘 다 거의 비어 있을 가능성이 높습니다.


1 물론 실행 가능한 쉘 코드 라이브러리도 있을 수 있습니다. 예를 들어 참조하십시오.bash 쉘 스크립트에서 실행 코드와 소스 코드를 구별합니까?

내 문제는 우아하지 않다는 것입니다 (개인 의견). 다른 변경 사항은 다음에서 확인할 수 있습니다.이 StackOverflow 답변이는 사용되는 셸 유형을 감지하고 각 셸에 대해 서로 다른 작업을 수행하는 데 의존합니다.

스크립트로서의 라이브러리에 대한 내 문제(사용 방법을 감지하기 위해 다소 지저분한 코드에 의존하는 것 제외)는 이상한 하이브리드가 된다는 것입니다.물건호출 방법에 따라 완전히 독립적인 두 가지 기능을 제공합니다. 다른 스크립트를 가져올 때 선택할 수 있는 기능을 정의하지만, 명령으로 사용되면 명령처럼 동작합니다. 이에 대한 매뉴얼을 작성하는 것은 어색할 것입니다(어떤 매뉴얼 섹션으로 분류되어야 합니까?).

나는 오히려(이것은 여전히 ​​내 개인적인 의견이다) 라이브러리 위치를 순수 쉘 라이브러리 파일로 분리하고 이를 사용해야 하는 사용자 호출 가능 스크립트에서 해당 라이브러리 파일을 얻는 것을 선호합니다. 이는 공유 라이브러리와 실행 가능한 바이너리와 동일한 디자인을 따릅니다.

관련 정보