web-dev-qa-db-ja.com

bash関数をさまざまなスクリプトで使用できますか?

さまざまなスクリプトで参照して使用したい関数があります。これを行う方法はありますか?異なるスクリプトに対して同じ関数を書き直したくありません。ありがとう。

37
Herves

確かに-関数を使用するスクリプトでは、次のようなコマンドを記述できます。

source function.sh

これは、コマンドが実行された時点でファイルにfunction.shの内容を含めることと同じです。 function.sh$PATHのディレクトリの1つにある必要があることに注意してください。そうでない場合は、絶対パスを指定する必要があります。

71
David Z

はい、すべての機能を共通のファイルにローカライズできます。これはまさに私がすべてのユーティリティ関数で行うことです。私は単一のutility.shincすべてのプログラムで使用されているホームディレクトリ内:

. $HOME/utility.shinc

これは、現在のシェルのコンテキストでスクリプトを実行します。これは重要です。インクルードスクリプトを実行するだけでは、サブシェルで実行され、変更は現在のシェルに反映されません。

スクリプトのグループに対しても同じことができます。それが「製品」の一部である場合、すべてがローカライズされるように、すべてのスクリプトと含まれているスクリプトを1つのシェルディレクトリに配置する傾向があります。

11
paxdiablo