zsh でパスのないファイルに対してドット コマンド (ソース) が機能しないのはなぜですか?

zsh でパスのないファイルに対してドット コマンド (ソース) が機能しないのはなぜですか?

.私は最近bashからzshに切り替えました。bashでは、 sourceコマンドにドットエイリアスを使用していました。例:

. .bashrc

. .bashrc、、で動作しました. ~/.bashrc. ./.bashrc

しかし、zsh ではドット エイリアスは同じようには機能しません。ファイルへのパスでのみ機能します。ただし、パスのないファイルを使用する場合は機能しません。

これは動作しません:

. .zshrc

次のエラーが発生します:.: no such file or directory: .zshrc

しかし、これらはすべて機能します:

source .zshrc
. ./.zshrc
. ~/.zshrc

答え1

それは実は標準的な行動ドットコマンドの:$PATH検索を使用します。コマンドを実行するときと同じです。通常の相対パスではありません。そのため、一般的なライブラリをたとえば ~/bin/ に置いて、. libwhatever.sh任意のディレクトリから簡単に読み込むことができます。

直接相対パス検索を実行することは、非標準の Bash 拡張機能です。

(同様に、dot は.実際には「シェル言語」標準にリストされているメイン コマンドであり、sourceシェル固有のエイリアスです。その逆ではありません。)

関連情報