可能性のある複製:
「。」と「ソース」を使用してスクリプトを実行
ドットコマンド「。」の両方を使用しました。与えられたrcファイルをリロードするための「ソース」(通常は環境変数を更新するため)。 2つの違いは何ですか?
.
はBourne and POSIX Shellコマンドで、source
はC-Shellコマンドです。
bash
、zsh
のような一部のBourne-Shell派生物、およびksh
のほとんどの実装には、source
コマンドがあり、これは通常.
のエイリアスです。ただし、違いのあるkshの場合。
Bashとzshの場合、.
とsource
は同じように動作しますが、それらの動作は、POSIXモードで実行するかどうかによって影響を受けます¹。
POSIXは、読み取りのためにファイルを開くことができない場合は.
コマンドがシェルを終了することを要求し、提供されたパスが含まれていない場合は$PATH
のディレクトリを検索してファイルを見つける必要があります/
。
zshとbash .
とsource
は、POSIXモードではPOSIXが必要とするように動作し、そうでない場合はpdkshのsource
と同様に動作します。つまり、開くことができない場合、スクリプトを終了しません。読み取り用のファイル(command .
と同じ)。$PATH
および現在のディレクトリでファイルを検索します。指定されたパスに/
が含まれていない場合。
AT&T kshのsource
もシェルを終了しませんが、現在のディレクトリでファイルを探しません。
概して、Bourneに似たシェル(command
が組み込まれていないBourne Shellは除く)では、一貫した動作が必要な場合は、
command . the-file-to-source || handle-error
the-file-to-sourceが現在のディレクトリにあることを意図している場合は、必ず次のように記述してください:
command . ./the-file-to-source || handle-error
sh
スクリプト(sh
はPOSIX sh
です)では、上記のPOSIXの動作に依存できるはずです。
_ zsh
およびbash
は、sh
として呼び出されたときにPOSIXモードを有効にします。 bash
の場合、環境でPOSIXLY_CORRECT
を受け取ったとき(POSIXコマンドbash
がないにもかかわらずbashとして呼び出されたときも)、またはSHELLOPTS=posix
を受け取ったとき、またはbash --posix
またはbash -o posix
を使用して、またはset -o posix
の後に呼び出された場合。 zshでは、emulate sh
を使用してエミュレートsh
します。エミュレーションは、zshの動作を変更する一連のオプション全体を変更します。この場合、オプションはPOSIX_BUILTINS
です。
Bashでは、(非POSIX)の[ -o posix ]
コマンドを使用して、POSIXモードかどうかを確認できます。 zshでは、emulate
の出力を確認してsh
エミュレーションにいるかどうかを確認するか、[[ -o posixbuiltins ]]
を使用してその特定のオプションが有効になっているかどうかを確認します。 emulate -L
を使用して、特定のエミュレーションモードを一時的に有効にすることもできます(現在のlocalスコープでのみエミュレートするため)。
source
は、読みやすさと自己文書化のためにあります。.
は入力が簡単なために存在しています。コマンドは同じです。 Perlには、同じ理由で、制御変数の多くの長いバージョンと短いバージョンがあります。