先日、楽しみのために作成したいくつかの基本的なシェルスクリプトをテストしてきました。私はシェルスクリプトを初めて使用するので、スクリプトを1つずつ実行してテストしました。スクリプトが少なくても大丈夫でした。スクリプトの数が増えるにつれ、すべてのスクリプトをテストするのに少し時間がかかるようになりました。少しWebを検索した後、Linuxのディレクトリ内のすべてのスクリプトを次々に実行する方法をいくつか見つけました。
Linuxのディレクトリですべてのスクリプトを実行する
ドキュメントディレクトリにいくつかのスクリプトがあります。
$ ls Documents/ linux.sh ostechnix.sh script1.sh script2.sh script3.sh script4.sh
それらはすべて、標準出力で「echo」コマンドを使用して指定された文字列を表示する単純な1ライナーシェルスクリプトです。
フォルダ内のすべてのスクリプトを実行できることを知る前に、私は通常、次のようにスクリプトを実行可能にします。
$ chmod +x script.sh
次に、コマンドを使用して実行します:
$ ./script.sh
または、
$ sh script.sh
ここでも、2番目のスクリプトを実行可能にして、実行します。
まあ、これを行うためのより良い方法があります。 "run-parts" を使用して、ディレクトリまたはパス内のすべてのスクリプトを実行できます。 指図。 run-partsコマンドは、ディレクトリまたはパスでスクリプトまたはプログラムを実行するために使用されます。
$ run-parts <directory-path>
run-partsコマンドの欠点の1つは、すべてのスクリプトが実行されないことです。スクリプトの名前が正しい場合にのみ機能します。名前は、完全にASCII大文字と小文字、ASCII数字、ASCIIアンダースコア、およびASCIIマイナスハイフンで構成されている必要があります。
この命名の問題を解決するために、正規表現を使用できます。 オプション。たとえば、次のコマンドは、〜/ Documents内のすべてのスクリプトファイルを検索して実行します。 文字「s」で始まり「sh」拡張子で終わるディレクトリ:
$ run-parts --regex '^s.*sh$' ~/Documents

run-partsコマンドを使用してLinuxのディレクトリですべてのスクリプトを実行します
トラブルシューティング:
以下のようなエラーが発生した場合;
run-parts: failed to exec Documents/script1.sh: Exec format error
次のガイドを参照して修正してください。
- run-partsコマンドでスクリプトを実行する際の「Execformatエラー」を修正
同様に、Documentsディレクトリで.shで終わるすべてのスクリプトファイルを実行するには、次のコマンドを実行します。
$ run-parts --regex '.*sh$' ~/Documents
文字「s」で始まり「sh」拡張子で終わるDocumentsディレクトリ内のすべてのファイルの名前を出力するには、次のコマンドを実行します。
$ run-parts --list --regex '^s.*sh$' Documents Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
このコマンドは、スクリプトファイルの名前のみを出力し、実行しません。
Documentsディレクトリで.shで終わるすべてのファイルを一覧表示するには、次のコマンドを実行します。
$ run-parts --list --regex '.*sh$' Documents Documents/linux.sh Documents/ostechnix.sh Documents/script1.sh Documents/script2.sh Documents/script3.sh Documents/script4.sh
run-partsコマンドは、主にcronジョブによって使用されます 手動での使用には信頼性がありません。
run-parts'sに合わせてスクリプトの名前を変更することを回避する別の方法 命名構造、検索を使用できます またはforループ コマンド。
文字"s"で始まるすべてのスクリプトファイルを検索して実行するには 〜/ Documentsフォルダーで、次を実行します:
$ find ~/Documents -maxdepth 1 -type f -executable -name 's*' -exec {} \;
指定されたディレクトリとそのすべてのサブディレクトリですべてのスクリプトを実行する場合は、 maxdepthを削除します。 上記のコマンドのオプション:
$ find ~/Documents -type f -executable -name 's*' -exec {} \;
拡張子が"。sh"で終わるすべてのスクリプトを実行するには 、実行:
$ find ~/Documents -maxdepth 1 -type f -executable -name '*.sh' -exec {} \;

検索コマンドを使用して、Linuxのディレクトリ内のすべてのスクリプトを検索して実行します
この方法にも小さな欠点があります。このコマンドは、現在のシェルで解釈できるスクリプトのみを実行できます。 awk、perl、python、シェルスクリプトなど、すべてのタイプのスクリプトを実行する場合は、forループを使用します。 以下のような方法。
$ for f in ~/Documents/s* ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
上記のコマンドは、〜/Documentsフォルダー内の文字「s」で始まるスクリプトを実行します。拡張子が「.sh」で終わるすべてのファイルを実行する場合は、次のようにします。
$ for f in ~/Documents/*.sh ; do [ -x "$f" ] && [ ! -d "$f" ] && "$f" ; done
詳細については、manページを参照してください。
$ man run-parts
$ man find
これがお役に立てば幸いです。