나는 내 컴퓨터를 구성/관리하는 데 도움이 되는 꽤 많은 쉘 스크립트 모음을 축적했는데, 무엇이 엉망이었는지 정리하고 싶습니다.
그 중 저는 다음과 같은 두 가지 유틸리티 함수를 정의했습니다.
error() {
printf '\e[4;5;31m%-s\e[m\n' "$@" >&2
}
warning() {
printf '\e[4;5;33m%-s\e[m\n' "$@" >&2
}
내가 하고 싶은 것은 이러한 기능과 일반적으로 사용되는 기타 기능을 자체 .sh
파일에 넣는 것입니다. 아마도 다른 bash 스크립트가 다른 작업을 수행하기 전에 필요한 기능을 "포함"할 수 있도록 디렉토리 계층 구조로 구성하는 것입니다.
이 문제관련이 있지만 이러한 "일반" 함수를 셸에서 사용할 수 있는 것을 원하지 않고 단지 해당 함수를 사용하도록 선택한 스크립트에서 사용할 수 있기를 원합니다. 이것이 바로 이러한 스크립트가 이러한 함수를 "포함"해야 한다고 말하는 이유입니다.
이러한 공통 기능을 "포함"하는 권장 방법은 무엇입니까?
현재 나는 다음과 같은 것을 시도하고 있습니다.
# this is myscript.sh residing in /home/enrico/path/to/
# error.sh only has the error() function as defined above, so I have to use echo to print the error message if I don't find it
source "$(dirname "$0")/commons/error.sh" || { echo "error.sh not found" >&2 && exit 1; }
# error() is available now
source "$(dirname "$0")/commons/warning.sh" || { error "warning.sh not found" && exit 1; }
# waringin() is available too
# ...
command_that_can_fail || error "failed because of bla and bla"
condition_to_be_concerned_about || warning "hey, there's something you should worry about"
나는 이 두 스크립트를 어떤 디렉토리(예: )에서든 실행할 수 있도록 source
앞쪽 "$(dirname "$0")/
(이 두 파일이 에 상대적인 위치 )에 추가했습니다 . 이 기술이 좋은 걸까요? 단점이 있나요?myscript.sh
myscript.sh
/home/enrico/path/to/myscript.sh
내가 생각할 수 있는 한 가지 단점은 해당 줄에서 shellcheck
's 지시문을 사용할 수 없다는 것입니다.source