Bash機能を新しいシェルファイルに動的に結合する

Bash機能を新しいシェルファイルに動的に結合する

複数のファイルがあるとしましょう。

a.sh
b.sh
c.sh
...
z.sh

各ファイルには次の機能があります。

   a(){
      echo "fooa" | bash
    }

今、もしすべての機能を1つのファイルに配置できます。

   a(){
      echo "fooa" | bash
   }

   b(){
      echo "foob" | bash
   }

   c(){
      echo "fooc" | bash
   }
    ...
   z(){
      echo "fooz" | bash
   }

問題は実際には別のファイルにあることです。私が望むのは、ソース10個または20個のファイルの代わりに1つのファイルを取得できるように動的にファイルに書き込むことです。

これを行う最良の方法は何ですか?

私ができることの1つは、ファイルを繰り返しインポートしたい1つのファイルにその内容を追加することです。他に可能な方法がありますか?

答え1

cat *.sh > all.shすべてのファイルを1つにリンクします。すでに存在する場合*.shは一致するため、少し不正確ですが、all.shここで実行するall.sh前にリダイレクトが消去されますcat

他のすべてのアイテムをインポートするスクリプトを作成することもできます(呼び出しincludeall.sh)。

for f in *.sh; do
    if [ "$f" != "includeall.sh" ]; then
        . "$f"
    fi
done

その後、それを取得するために使用します. includeall.sh。これは、if自分自身を再度含めることを防ぐために行われます。しかし、..scriptを別のディレクトリに置くのはincludeallおそらく悪い考えではありません。これにより、ディレクトリ構造がよりきれいになり、誤って誤ったスクリプトを取得するのが難しくなります。この場合。a.shz.shfor f in dir/*.sh; do . "$f"; done

関連情報