2012-05-30 8 views
65

シェルスクリプトに別のシェルスクリプトを組み込んでその機能にアクセスする方法はありますか?bashシェルスクリプトにファイルを含める方法

PHPのように、単に関数名を呼び出すことによって含まれる関数を実行するには、includeディレクティブを他のPHPファイルと一緒に使用することができます。

+0

[バッシュ?:_best_は他のスクリプトを含める方法]の可能複製(http://stackoverflow.com/questions/192292/bash-how-best-to-include-other -scripts) – Troubadour

+0

@Troubadourは参考に感謝します。投稿が 'source'コマンドを参照しているにもかかわらず、質問自体は' source'ファイルの場所を特定する方法を尋ねています。 – Mechaflash

+0

はい、それでも十分です。あなたが "bash"と "include"(あなた自身の質問のタイトルにある2つの単語)を検索した場合、結果の上にこれを見て、そのような基本的な質問をする必要はありませんでした。 – Troubadour

答えて

128

は、単にあなたのスクリプト内に置く:

source FILE 

それとも

. FILE 

それは同じことです。

$ LANG=C help source 
source: source filename [arguments] 
Execute commands from a file in the current shell. 

Read and execute commands from FILENAME in the current shell. The 
entries in $PATH are used to find the directory containing FILENAME. 
If any ARGUMENTS are supplied, they become the positional parameters 
when FILENAME is executed. 

Exit Status: 
Returns the status of the last command executed in FILENAME; fails if 
FILENAME cannot be read. 
+12

注意してください。ソースは –

+0

ではありませんが、POSIX準拠ですが、ソースは正確には 'C'言語と同じではありません。ここでsourceは、子スクリプトをメインスクリプトに実行しています。子スクリプトから特定の関数を呼び出すだけならどうでしょうか? –

+6

'を混同しないでください。 script.sh'を '。/ script.sh'で実行します。 –

25

はい、sourceまたはちょうど.ある短い形式を使用します。答え以上

. other_script.sh 
+0

'.'バージョンは' sh'とBashで動作することに注意してください。 "ソース"はBashでのみ動作します。 –

11

正しいですが、他のフォルダ内のスクリプトを実行する場合、いくつかの問題があるでしょう。

たとえば、a.shb.shは、同じフォルダ内にあり、 aを含むbは. ./b.shとなります。

xx/xx/xx/a.shなどのフォルダからスクリプトを実行すると、ファイルb.shは見つかりません:./b.sh: No such file or directory

私が使用

. $(dirname "$0")/b.sh 
関連する問題