人間が読める方法(ソースコード経由)で実行する2つ以上のファイルを設定します。

人間が読める方法(ソースコード経由)で実行する2つ以上のファイルを設定します。

私は現在のBashセッションでBashスクリプトファイルのコレクションを実行するために、次の方法を使用します。

source ~/myScripts/{assignments.sh,nginx_conf.sh,php_conf.sh,drush_install.sh}

メンテナンスが不便すぎると思います。いくつかの垂直コレクションがより良いです。擬似コード:

assignments.sh
nginx_conf.sh
php_conf.sh
drush_install.sh

これを垂直方向にどうしますか?

ところで、ここにあるソース文書が次のようなものかどうかは分かりません。これ最良の方法です。

修正する

sourceBash 4.3.48(1) 以降、Bash インタプリタは 1 つsourceのファイルしか処理できない方法で評価し、それ以外のすべての操作は引数として評価されるため、1 行の操作が失敗する運命であることを理解しています。最初のファイル(中括弧セットは{}役に立ちません)。

bash私の感想はその逆と同じだということだsource

ベストアンサー1

Heredocは、他の何もせずに各ファイル名を独自の行に配置し(ファイル名に改行文字などのクレイジーな内容が含まれていないと仮定)、ファイル名の特定の順序を許可します。

while read f; do
   source ~/myScripts/"$f"
done <<SRC_LIST
assignments.sh
nginx_conf.sh
php_conf.sh
drush_install.sh
so_forth.sh
SRC_LIST

source file [arguments]これにより、後続のファイル名が引数として扱われる問題も回避されますassignments.sh(実際には、後続のファイル名を引数として意味しない限り??)。このリストはファイルシステムのエントリと手動で同期する必要があります。

別のオプションは、ファイルを一覧表示する退屈をスキップしてそれをglobに入れることです。これは、ディレクトリ内の一致するすべてのファイルがソースになる可能性があり、ソースにする必要があると仮定します(ソースをインポートしてはならない*.sh他の任意のファイルは混在しません)。ただし、globに一致するファイルがないと、この状況は複雑になります。この場合、ソースをインポートするためにデフォルトでbashリテラルファイル名が渡されるため、~/myScripts/*.shこの問題を解決する必要があります(必要に応じて一時的に)。ソースがなければ、一致しないソースは得られません。

REVERT=$(shopt -p nullglob)
shopt -s nullglob
for f in ~/myScripts/*.sh; do
    source "$f"
done
$REVERT

この方法では、ファイルの順序を取得する必要がある場合は、globが正しい順序でファイル名と一致するようにファイル名を指定する必要があります。 (ZSHでは空のglobshoptしか実行されないため、呼び出しは必要ありませんfor f in ~/myScripts/*.sh(N); do。他のシェルは、globの処理方法と一致するものがない場合に実行する操作が異なります。)

おすすめ記事