
bashスクリプトを実行する2つの方法が同じかどうか疑問に思います。
. ./myScript.sh source myScript.sh
- どちらもスクリプトを実行するのではなく、スクリプトの内容を実行しますか?つまり、スクリプトを実行するためのサブシェルを作成しませんか?
答え1
彼らはまったく同じことをするので、bashで同じです。一方、
source
5文字長く、POSIX専用シェルやBourneに移植できない一方.
(点)は移植可能なのでsource
。そうですね。ファイルのインポートは現在のシェルでコマンドを実行し、これは現在のシェル環境に影響します。それでもソースファイルに引数を渡すことができ、bashは実際には
$PATH
通常のコマンドのようにファイル名を見つけます(ファイル名にスラッシュが含まれていない場合)。
.
vsの元の質問とは関係ありませんが、source
あなたの例では
. ./myScript.sh
等しくない
source myScript.sh
なぜなら while.
とsource
機能は同じですmyScript.sh
が、./myScript.sh
同じではないからです。スラッシュが含まれているため、./myScript.sh
パスとして解釈され、シェルにはスラッシュがないため、最初に./myScript.sh
シェルmyScript.sh
で$PATH
検索します。これはPOSIX指定規格の行動.
。ほとんどのシェルはデフォルトでこれを行いますが、拡張機能(パスの検索後に現在の作業ディレクトリから検索)や.
/ behaviorを変更するオプションを追加することもできますsource
。
答え2
はい、同じです。機能的な違いはありません。.
ただ組み込まれた同義語だけですsource
。
bash
(編集:はっきりとこれにのみ適用されますzsh
。一部の軽いシェルはsource
POSIX.
でのみ指定されているように、、ksh
などdash
はash
そうでない可能性がありますsource
。jw013の答え参考用。 )