특정 디렉토리에서 찾은 모든 스크립트를 순차적으로 실행하는 쉘 스크립트를 만들고 싶습니다.
다음 제한 사항을 준수해야 합니다.
스크립트는 알파벳 순서로 실행되어야 합니다.
백업 스크립트(또는 같은 일반적인 백업 스크립트처럼 보이는 스크립트라고도 함
foo~
)는 생략해야 합니다.bar.bak
매개변수는 스크립트에 전달되어야 합니다.
"스크립트"(실행 파일 및 실행 파일에 대한 심볼릭 링크 가능)만 실행해야 합니다.
나는 이것이 분할 구성(내 데비안 시스템에서)의 일반적인 패턴이라고 생각하며 정말 좋아합니다.
이제 이 모든 작업을 수행하는 간단한 시작 스크립트를 만들었습니다.
#!/bin/sh
SCRIPTDIR=/etc/scripts/up.d
for SCRIPT in "${SCRIPTDIR}/"*
do
case "${SCRIPT}" in
*~|*.bak)
continue
;;
*)
if [ -f "${SCRIPT}" -a -x "${SCRIPT}" ]; then
"${SCRIPT}" $@
fi
;;
esac
done
이 패턴은 매우 일반적이기 때문에 이러한 스크립트가 내 시스템에 이미 설치되어 있는지 궁금합니다. 이 스크립트에는 내 시스템보다 더 많은 테스트와 버그 수정이 포함되어 있을 것입니다. 하지만 찾을 수 없습니다.
데비안 시스템에 그런 시작 스크립트가 있다는 것을 알고 있나요?
답변1
당신은 그것을 사용할 수 있습니다run-parts
주문하다:
run-parts runs all the executable files named within constraints
described below, found in directory directory. Other files and
directories are silently ignored.
If neither the --lsbsysinit option nor the --regex option is given then
the names must consist entirely of ASCII upper- and lower-case letters,
ASCII digits, ASCII underscores, and ASCII minus-hyphens.
기본 제한은 확장자, 물결표 등이 있는 파일을 무시합니다. 여러 옵션을 다음에 전달하여 여러 --arg
인수를 전달할 수 있습니다 run-parts
.
-a, --arg=argument
pass argument to the scripts. Use --arg once for each argument
you want passed.
전달할 매개변수 목록을 작성할 수 있습니다.
for i; do args+=(" -a '$i'"); done
run-parts ... "${args[@]}" ...
crontab
예를 들어, 기본적으로 다양한 디렉터리에서 스크립트를 실행하는 데 사용됩니다 cron.*
.