特定のディレクトリで見つかったすべてのスクリプトを順番に実行するシェルスクリプトを作成したいと思います。
次の制限事項に従う必要があります。
スクリプトはアルファベット順に実行する必要があります。
バックアップスクリプト(または同じ一般的なバックアップスクリプトのように見えるスクリプトとも呼ばれる
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.*
。