zsh: "source" コマンドは機能を再ロードしません。

zsh:

(これはzsh 5.7.1がインストールされているMacOSにあります)

zshからカスタム関数をロードする方法は次のとおりです。

# Custom functions
fpath=($HOME/.zfunc $fpath)
autoload -Uz mackupbackup
autoload -Uz tac
autoload -Uz airplane
autoload -Uz wakeMyDesktop

各関数は~/.zfuncディレクトリ内の独自のファイルです。その後、このディレクトリは他のディレクトリにシンボリックリンクされていますmackup

現在、コミットハッシュをクリップボードにコピーする新しい関数を作成しました。 $ fpathというファイルを作成しghash、関数を作成し、autoloadmyに新しい行を追加して.zshrc実行しましたsource ~/.zshrc

これは機能です

# copy the commit hash of the given git reference, or HEAD if none is given
ref=$1

if [[ $ref ]]; then
  git rev-parse $1 | pbcopy
else
  git rev-parse HEAD | pbcopy
fi

購入後に.zshrc機能が利用可能になって動作しますが、動作確認を印刷するために次の行を追加したいと思います。

echo "Copied $(pbpaste) to clipboard"

だから、その行を追加し、ファイルを保存して.zshrc再インポートしました。

関数を再実行しましたが、動作は変わりませんでした!

私が何か間違っているようで、機能を変え続けてソーシングを変更しましたが、.zshrc役に立ちませんでした。全体的に.zshrcリソースを22回再インポートしましたが、その時点で作業を完了するのに37秒かかりました。

その後、関数を再ロードするのではない可能性があることに気づき、zshstart新しいインスタンスを実行し(約1秒かかり)、関数が期待どおりに機能し始めました!

source新しい機能を選択したが機能が変更された後に更新されなかった理由を知っている人はいますか?

source ~/.zshrcボーナスの質問:実行するたびに時間がかかるのはなぜですか?

ベストアンサー1

実際、人々が冪等になるようにファイルを作成することはほとんどないので、rcファイルをインポートすることはほとんどありません。一般的な例は、毎回同じディレクトリをパスの前に追加するユーザーの場合ですfpath。これは、もちろん、そのルートを検索するのに時間が長くかかることを意味します。そして間違いなく、ここがこの種のことをすることができる唯一の場所ではありません。

また、自動ロードを正しく理解していません。ドキュメントに示すように、本文を持たない関数は自動的にロードされます。その機能が初めて実行されたとき。明らかに、関数がすでにロードされており、関数本体がある場合は再ロードされません。

関数を再度呼び出す前に、その関数を呼び出す必要がありますunfunctionautoload

.zshrcZシェルソースの例freload()引数の後に、名前付きのすべての関数に対してこれを実行する関数が含まれています。typeset -U path cdpath fpath manpathはい。

おすすめ記事