2012-02-17 14 views
58
私のような行が含まれるシェルスクリプトを見てきました

Unix/Linuxコンテキストでファイルが `source`-dの場合はどうなりますか?

source someOtherFile 

私はそれが実行するsomeOtherFileの内容を原因と知っているが、sourceの意義は何ですか?


フォローアップの質問:任意のスクリプトをソースにすることができますか、特定の種類のスクリプトのみを使用できますか?スクリプトがソースになっているとき(通常はそれを実行するのではなく)、環境変数以外の副作用はありますか?

+2

クロスサイト複製:http://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-scrip/176788#176788 – lesmana

答えて

67

スクリプト上でコマンドsourceを実行すると、現在のプロセスのコンテキスト内でスクリプトが実行されます。つまり、スクリプトによって設定された環境変数は、実行が終了した後でも利用可能な状態になります。これは、通常はスクリプトを実行するのとは対照的です。この場合、新しく生成されたプロセス内で設定された環境変数は、スクリプトが終了すると失われます。

実行可能なシェルスクリプトをソースとして使用できます。最終結果は、スクリプト内のコマンドを端末に入力した場合と同じになります。たとえば、スクリプトがディレクトリを変更すると、実行が終了すると、現在の作業ディレクトリが変更されます。

+2

ANYスクリプトをソースにすることはできますか、特定の種類のスクリプトのみを使用することはできますか? スクリプトが(通常はそれを実行するのではなく)ソースとなっている場合、環境変数以外の副作用はありますか? また、あなたの答えは簡潔でわかりやすいものです。ありがとう! –

+4

任意のシェルスクリプトをソースできます。副作用は、文字通りあなたのプロセスでスクリプトが実行されていることによって作成されます。ディレクトリを変更すると、あなたのpwdの変更が表示されます。シェルスクリプトを実行するだけでは、あなたのpwdは変更されません。 – Interrobang

+0

私はソースファイルに長いスクリプトがありますか?それは終了する予定ですか?またはデフォルトのタイムアウトがありますか? –

16

bashを使って、ファイルを読み込み、ファイル内のコマンドを実行すると、それはsourcingと呼ばれます。要点は、現在のプロセス(シェル)がこれを行い、新しい子プロセスではないということです。

BASHでは、sourceコマンドを使用するか、単に.コマンドを使用してファイルを送信することができます。

2

sourceは、コマンドに続くファイルを現在のコンテキストで実行されるコマンドのリストとして評価するUnixコマンドです。また、ファイルを入手するために.を使用することもできます。

source my-script.sh; 
. my-script.sh; 

どちらのコマンドも同じ効果があります。

これに対して、スクリプトファイル名を目的のシェルに渡すと、現在のコンテキストではなくサブシェルでスクリプトが実行されます。

関連する問題