일반적으로 디렉터리의 모든 스크립트를 실행합니다.

일반적으로 디렉터리의 모든 스크립트를 실행합니다.

특정 디렉토리에서 찾은 모든 스크립트를 순차적으로 실행하는 쉘 스크립트를 만들고 싶습니다.

다음 제한 사항을 준수해야 합니다.

  • 스크립트는 알파벳 순서로 실행되어야 합니다.

  • 백업 스크립트(또는 같은 일반적인 백업 스크립트처럼 보이는 스크립트라고도 함 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.*.

관련 정보