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
関数が含まれていますfoo
。foo
私が知る限り、シェルにはbash
これらの特定の機能はありません。
他のシェルには異なる形式の「自動ロード」機能があります。
答え2
この質問は主観的に分類できますが、毎回車輪を再作成するのではなく、ライブラリを使用して頻繁に使用されるコードを保存することが一般的に許可されるベストプラクティスだと思います。 source
関数と変数を定義するスクリプトはこれを行うシェル方式なので、そうだと言いたいです。source
おそらくライブラリスクリプトを持って使用するのは良い習慣です。
実際には、さらに一歩進んで、よく使うツールとスクリプトを含むbin
ディレクトリがあります。これらのライブラリスクリプトの一部は、対話型シェルで簡単に使用できます。PATH
source