![더 큰 스크립트를 여러 스크립트로 분할하여 기본 스크립트에 소스를 제공하는 것이 일반적입니까?](https://linux55.com/image/31754/%EB%8D%94%20%ED%81%B0%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC%20%EC%97%AC%EB%9F%AC%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A1%9C%20%EB%B6%84%ED%95%A0%ED%95%98%EC%97%AC%20%EA%B8%B0%EB%B3%B8%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%20%EC%86%8C%EC%8A%A4%EB%A5%BC%20%EC%A0%9C%EA%B3%B5%ED%95%98%EB%8A%94%20%EA%B2%83%EC%9D%B4%20%EC%9D%BC%EB%B0%98%EC%A0%81%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
나는 현재 더 큰 Bash 스크립트(내 오픈 소스 프로젝트)를 작업하고 있는데 엉망이 되기 시작했습니다. 논리를 함수로 나누고 가능한 경우 로컬 변수를 사용했으며 몇 개의 전역 변수만 선언했습니다. 그래도 유지 관리가 어려워집니다.
나는 스크립트를 여러 스크립트로 분할하고 이를 내 기본 스크립트에 소싱하는 것을 고려했습니다(다른 언어로 가져오는 것과 유사).
하지만 이것이 가능한 접근 방식인지 알고 싶습니다. 첫째, 여러 스크립트를 얻으면 스크립트 실행 시간이 심각하게 느려질 수 있고, 둘째, 배포가 더 어려워집니다.
그렇다면 이것이 좋은 접근 방식일까요? 다른 (오픈 소스) 프로젝트도 이 작업을 수행합니까?
답변1
예, 이것은 일반적인 관행입니다. 예를 들어 Unix 초기에는 다중 사용자 작업을 위한 부팅 단계를 통해 시스템을 안내하는 쉘 코드가 단일 파일이었습니다 /etc/rc
. 오늘날 부팅 프로세스는 기능별로 구분된 많은 쉘 스크립트에 의해 제어됩니다. 필요에 따라 중앙 위치에서 가져온 공통 함수 및 변수. Linux 배포판, Mac 및 BSD는 모두 이 접근 방식을 다양한 수준으로 사용합니다.
답변2
쉘은 당시 작업에 적합한 도구였습니까? 코드 증가 문제를 경험한 개발자로서 저는 다시 작성하는 것에 대해 생각하는 대신 조각을 애플리케이션을 확장하려는 규모에 더 적합한 것으로 분리하는 것을 고려해야 한다고 말할 수 있습니다(예: Python, Ruby 또는 Perl) ?
Shell은 유틸리티 언어(스크립팅 언어)이므로 이 크기로 확장하기가 어렵습니다.
답변3
유지 관리가 더 쉬워지면 두 가지를 모두 수행할 수 있습니다. 쉽게 유지 관리할 수 있도록 논리적 부분으로 나눈 다음 Makefile을 작성하여 배포를 위해 모두 다시 정리하는 대신 포함 파일에서 출력 파일로 함수를 복사하는 빠른 스크립트를 작성할 수 있습니다. 해당 source
줄을 삭제하거나 다음과 같은 사소한 작업을 수행합니다(탭 문자가 필요하므로 다시 탭해야 합니다 make
).
all: myscript
myscript: includes/* body/*
cat $^ > "$@" || (rm -f "$@"; exit 1)
그러면 "소스" 버전(편집용)과 "바이너리" 버전(간단한 설치용)이 생성됩니다.
답변4
일반적이든 아니든, 콘센트 세트가 아닌 다른 것을 소싱하는 것이 좋은 생각이라고 생각합니다. 코드를 가져와서 실행하는 것은 혼란스럽고 환경 및 기타 변수 설정으로 인해 코드가 소스 코드에 크게 의존하게 되므로 재사용이 제한된다는 것을 알았습니다.
애플리케이션을 더 작고 독립적인 스크립트로 나누고 일련의 명령으로 실행하는 것이 더 좋습니다. 이렇게 하면 대화형 셸에서 각 개별 스크립트를 실행하고 각 명령 호출 사이에 파일, 로그 등을 검사할 수 있으므로 디버깅이 단순화됩니다. 단일 대규모 애플리케이션 스크립트는 디버깅이 완료된 후 일련의 명령을 실행하는 간단한 제어 스크립트가 됩니다.
더 작고 독립적인 스크립트 세트는 설치에 어려움을 겪었습니다.