「.」との違いは何ですか?そして、シェルの「ソース」とは何ですか? [コピー]

「.」との違いは何ですか?そして、シェルの「ソース」とは何ですか? [コピー]

重複の可能性:
「。」と「ソース」として実行

私は与えられたrcファイルを再ロードするためにドットコマンド "."と "source"を使用しましたが(通常は環境変数を更新するために)これが違って好むかどうかはわかりません。 2つの違いは何ですか?

ベストアンサー1

.Bourne および POSIX シェルコマンドsourceですが、C-Shell コマンドです。

bashなどの一部のBourne-shell派生zshのほとんどの実装には、一般にエイリアスコマンドがkshあります。ただし、若干異なる動作をする場合があります(例:zshやkshなど)。source.

bashの場合は同じように動作しますが、POSIXモードで実行されているかどうかに応じて動作が影響を受けます.source

POSIXでは、.提供された$PATHパスに/

csh'sはsource引数をパスとして解釈し、その中にあるファイルを見つけません$PATH

bashは、POSIXモードではPOSIXが要求したように動作し、非.POSIXモードではpdkshが要求するように動作します。つまり、読み取り用にファイルを開くことができず(同じ)ファイルが見つからない場合は、スクリプトを終了しません。sourcesourcecommand .$PATH と現在のディレクトリ提供されたパスに/

zsh は、現行ディレクトリーの検索.中に POSIX の要件に従って機能します。source最初次に$PATH(シミュレーションでもcsh)パラメータが含まれていない場合/(参照)info zsh .そしてinfo zsh source詳細はこちら)。シェルは、ファイルが見つからない.source開かない場合、shPOSIXモード(エミュレーション)でのみ中断されます。

AT&T ksh もsourceシェルを終了しますが、現在のディレクトリでファイルを検索しません。

全体的にBourneに似たシェル(組み込みBourneシェルなしではありませんがcommand)で一貫した動作が必要な場合は、次のことができます。

command . /path/to/the-file-to-source || handle-error

そして、ファイルをソースに現在のディレクトリになければなりません。以下を作成します。

command . ./the-file-to-source || handle-error

POSIXを使用するshスクリプトでは、上記のPOSIX動作を使用できる必要があります。shsh


1呼び出し時にPOSIXモードを有効にzshします。の場合、その環境で受信された場合(bashコマンドで呼び出された場合、POSIXコマンドが呼び出されていない場合でも)、受信された場合、またはで、または後で呼び出された場合。 zshを使用すると使用できますbashshbashPOSIXLY_CORRECTbashSHELLOPTS=posixbash --posixbash -o posixset -o posixemulate shシミュレーション sh。シミュレーションは zsh の動作を変更するいくつかのオプションを変更します。この場合、オプションはですPOSIX_BUILTINS

Bashでは、(POSIX以外)コマンドを使用してPOSIXモードになっていることを確認できます[ -o posix ]。 zshでは、出力を確認しemulateて偽装していることを確認しshたり、[[ -o posixbuiltins ]]特定のオプションが有効になっていることを確認できます。特定のエミュレーションモードを一時的に有効にすることもできますemulate -L(現在のバージョンにあります)。地元の範囲のみ)。

²非対話型シェルに適用できます。対話型シェルの場合、異なるシェルが異なる動作をし、一部は失敗を無視し、一部はいくつかの構文エラーでプロンプトを返します。また、サブシェルで実行している場合は、サブシェルのみが終了します。

おすすめ記事