複数のスクリプトで関数を再利用するには?

複数のスクリプトで関数を再利用するには?

Bashでは、いくつかのスクリプトで関数を再利用したい場合があります。すべてのスクリプトで関数定義を繰り返すのは悪いことではありませんか?では、良い事例はありますか?

次のアプローチは良い考えですか?

  • 関数の定義をmyfunction独自のスクリプトでラップしますdefine_myfunction.sh
  • 関数を呼び出すスクリプトでは、source define_myfunction.sh関数が呼び出されますmyfunction arg1 arg2 ...

ありがとうございます。

答え1

で、bashそれは良いアプローチです。はい。

source「ライブラリ」スクリプトを使用またはインポートすると、.複数のスクリプト間で関数定義を共有する問題を適切に解決できます。 「ライブラリ」スクリプトで定義された関数にアクセスする必要があるすべてのスクリプトは、おそらくスクリプトの上部に必要なファイルを取得します。

これにより、単一の「ライブラリ」スクリプトから関連機能を収集し、その機能にアクセスできます。

まったく関係がないわけではありませんが、bashシェルは非対話型シェル(スクリプトなど)を実行すると自動的にファイルを取得することもできます。これは、スクリプトの特定の環境を設定するために使用できます。

BASH_ENV="$HOME/stuff/script.env" ./myscript

...wherescript.envでは、関数定義、シェルまたは環境変数の設定、他のファイルのインポートなど、すべての操作を実行できます。


一部のシェル(例ksh93:)には、これらの関数定義スクリプトを含めることができるディレクトリを指す環境変数があります。ではksh93変数をといいますFPATH。スクリプトには、ユーザーがコマンドライン(またはスクリプト内)に入力したときに自動的に検出される$FPATH/foo関数が含まれていますfoofoo私が知る限り、シェルにはbashこれらの特定の機能はありません。

他のシェルには異なる形式の「自動ロード」機能があります。

答え2

この質問は主観的に分類できますが、毎回車輪を再作成するのではなく、ライブラリを使用して頻繁に使用されるコードを保存することが一般的に許可されるベストプラクティスだと思います。 source関数と変数を定義するスクリプトはこれを行うシェル方式なので、そうだと言いたいです。sourceおそらくライブラリスクリプトを持って使用するのは良い習慣です。

実際には、さらに一歩進んで、よく使うツールとスクリプトを含むbinディレクトリがあります。これらのライブラリスクリプトの一部は、対話型シェルで簡単に使用できます。PATHsource

関連情報