Bashでは、いくつかのスクリプトで関数を再利用したい場合があります。すべてのスクリプトで関数の定義を繰り返すのは悪いことですか?もしそうなら、いくつかの良い習慣は何ですか?
次の方法は良い考えですか?
myfunction
を独自のスクリプトdefine_myfunction.sh
でラップします。source define_myfunction.sh
、次に関数myfunction arg1 arg2 ...
を呼び出します。ありがとう。
bash
では、そうするのが良い方法です。
source
または.
を使用して「ライブラリ」スクリプトを調達することは、2つ以上のスクリプト間で関数定義を共有したいという問題に対する適切な解決策です。 「ライブラリ」スクリプトで定義された関数へのアクセスを必要とする各スクリプトは、おそらくスクリプトの上部にある必要なファイルを調達します。
これにより、関連する関数を1つの「ライブラリ」スクリプトに収集し、それを入手してそれらにアクセスできます。
まったく無関係というわけではありませんが、bash
シェルには、非インタラクティブシェル(スクリプトなど)を実行すると、自動的にファイルを読み込む機能もあります。これは、スクリプトの特定の環境を設定するために使用できます。
BASH_ENV="$HOME/stuff/script.env" ./myscript
...ここで、script.env
は、関数の定義やシェル変数や環境変数の設定から、他のファイルの取得など、何でも実行できます。
ksh93
などの一部のシェルには、これらのような関数定義スクリプトを含む可能性のあるディレクトリを指す環境変数があります。 ksh93
では、この変数はFPATH
と呼ばれます。スクリプト$FPATH/foo
には、ユーザーがコマンドライン(またはスクリプト)でfoo
と入力すると自動的に見つかるfoo
という関数が含まれます。 bash
Shellは私の知る限り、この特定の機能を備えていません。
他のシェルには、他の形式の「自動ロード」機能があります。
この質問は主観的であるというフラグが立てられる可能性がありますが、ホイールを毎回再発明するのではなく、一般的に使用されるコードにライブラリを使用することがベストプラクティスとして一般に受け入れられていると思います。関数と変数を定義するスクリプトをsource
ingするのがシェルの方法です。そのため、ライブラリスクリプトを作成してsource
ingすることは、おそらく良い方法です。
私は実際にさらに進んで、頻繁に使用するツールとスクリプトを使用してbin
にPATH
ディレクトリを作成しました。それらのライブラリスクリプトの一部がそこにあるので、インタラクティブシェルで使用するためにそれらを簡単にsource
できます。