パラメーターとしてパスを受け取るスクリプトがあるとします。そのパスにあるすべてのスクリプトを実行するにはどうすればよいですか?
パラメーターとしてパスを受け取るスクリプトがあるとします。そのパスにあるすべてのスクリプトを実行するにはどうすればよいですか?
回答:
パスでディレクトリへのパスを意味すると仮定した場合、を使用しますrun-parts
。からman run-parts
:
run-parts - run scripts or programs in a directory
最初に、実行するすべてのスクリプトに実行権限を設定する必要があります。通常run-parts
、ディレクトリは無視され、実行可能でないファイルもそのディレクトリに存在します。
実行する前に、--test
オプションによって実行されるファイルを確認する必要があります。
run-parts --test /path/to/directory
run-parts
実行されるスクリプトの厳密な命名規則があることに言及する必要があります。
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.
man run-parts
より多くのアイデアを得るためにチェックしてください。
run-parts /home/you/Dropbox/scripts_to_run
。..しかし命名については注意..be
スクリプトの名前が正しい場合、実行部分は機能します。スクリプトのrun-parts
名前を複雑な命名規則に合わせて変更したくない場合は、次のような簡単なことを行うことができます。
for file in ~/target/*; do $file 2>/dev/null; done
これは、にあるすべてのファイル(およびディレクトリ)を実行しようとします~/target
。2>/dev/null
ディレクトリや非実行可能ファイルを実行しようとすると、リダイレクトのエラーメッセージは、それは文句を言わないように。
または、より洗練されたものを試すことができます
for file in ~/target/*; do
[ -f "$file" ] && [ -x "$file" ] && "$file"
done
これにより、各結果がファイル([ -f $file ]
)であるか、実行可能([ -x $file ]
)であるかがチェックされ、両方のテストが成功した場合にのみ、ファイルの実行が試行されます。