通常、ディレクトリ内のすべてのスクリプトを実行します。

通常、ディレクトリ内のすべてのスクリプトを実行します。

特定のディレクトリで見つかったすべてのスクリプトを順番に実行するシェルスクリプトを作成したいと思います。

次の制限事項に従う必要があります。

  • スクリプトはアルファベット順に実行する必要があります。

  • バックアップスクリプト(または同じ一般的なバックアップスクリプトのように見えるスクリプトとも呼ばれるfoo~)は省略する必要があります。bar.bak

  • パラメータはスクリプトに渡す必要があります。

  • 「スクリプト」(実行ファイルと実行ファイルへのシンボリックリンク可能)のみを実行する必要があります。

私はこれが分割構成(私のDebianシステムで)の一般的なパターンであると思い、本当に好きです。

これで、これをすべて実行する簡単な起動スクリプトを作成しました。

#!/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

このパターンは非常に一般的なので、これらのスクリプトが私のシステムにすでにインストールされているかどうか疑問に思います。このスクリプトには、私のシステムよりも多くのテストとバグ修正が含まれています。しかし、見つかりません。

Debianシステムにそのような起動スクリプトがあることを知っていますか?

ベストアンサー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.*

おすすめ記事