「。」を使用してスクリプトを実行する 」および「source」


25
  1. bashスクリプトを実行する次の2つの方法が同等かどうか疑問に思っていましたか?

    . ./myScript.sh
    
    source myScript.sh
  2. 彼らは両方とも、スクリプトを実行するのではなく、スクリプトのコンテンツを実行していますか?つまり、スクリプトを実行するためのサブシェルを作成していませんか?

1
ねえ、それはマンページにあります!
アレックス

@alex:見せてください?man .man sourceまたは私がまだ知らないことは何でも。
ティム

2
参照してくださいtype .help .
rozcietrzewiacz

man $SHELL/source
アレックス

4
他の人によると、よりポータブルです。
-l0b0

回答:


21
  1. それらはまったく同じことをするという点でbashで同等です。一方、sourceは5文字長く、POSIXのみのシェルやBourneに移植できません.が、(ドット)は移植できないため、を使用することはありませんsource

  2. それは正しいです-ファイルをソースすると、現在のシェルでコマンドが実行され、現在のシェル環境に影響します。ソースファイルに引数を渡すことができ$PATH、スラッシュが含まれていない場合、bashは通常のコマンドと同じように実際にファイル名を探します。


.vs の元の質問とは関係ありませんsourceが、あなたの例では、

. ./myScript.sh 

同一ではありません

source myScript.sh

while .sourceは機能的に同一でmyScript.shあり./myScript.sh、同じではないためです。./myScript.shスラッシュが含まれているため、パスとして解釈され、シェルはを使用し./myScript.shます。ただし、myScript.shスラッシュがないため、シェルは$PATH最初にそれを検索します。これはのPOSIX指定標準動作です.。ほとんどのシェルはこれにデフォルト設定されていますが、拡張子(パス検索後の現在の作業ディレクトリでの検索など)または./ の動作を変更するオプションを追加する場合がありますsource


2
ファイルの提供パスが含まれていない行動は/シェルに依存しており、用bashおよびzshPOSIXモードが有効になっているかどうかに依存します。また、多くのksh実装で.は、とは異なる動作をすることに注意してくださいsource
ステファンシャゼル

@StephaneChazelasはい、そうです。上記の説明がPOSIX標準に関するものであることを明確にするために、メモを追加しました。
jw013

8

はい、それらは同等です。機能的な違いはありません。.はの組み込みの同義語ですsource

(編集:どうやらこれはのみ真であるbashzshいくつかの軽量シェルはありません。sourceだけでは、.とてもPOSIXによって指定されkshdashash、などは持っていないかもしれませんsource参照してください。jw013の答えの情報のために。)


ありがとう!しかし、$ alias .出力bash: alias: .: not found
ティム

つまり、両方とも組み込みであり、エイリアスも組み込みです。これは文書化されていますが、この場合、「別名」ではなく「同義語」が正しい用語だと思います。
カレブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.