如何使用 zsh 'command' 选项来执行内置的 'source' 命令?



每次我的shell源文件时,我都会尝试进行日志记录。我正在使用zsh,所以我进入zshenv并添加了这个函数。

source() {
echo "sourcing $1"
command source $1
}

这个想法是每次"源[文件]";出现在我的一个点文件中并被执行时,它应该先将操作打印到终端,然后再实际获取文件。

相反,我得到了一些错误,像这个

sourcing /Users/js/.cargo/env
source:2: command not found: source
sourcing /Users/js/.sources/postgres-env.sh
source:2: command not found: source
sourcing /Users/js/.oh-my-zsh/oh-my-zsh.sh
source:2: command not found: source
sourcing /Users/js/.iterm2_shell_integration.zsh
source:2: command not found: source

在这里使用shell"command"选项和zsh调用source的正确方法是什么?

command旨在专门调用外部命令。例如,如果您有git的别名或函数,command git将绕过这些别名或函数。

您正在寻找builtin命令,以将命令查找限制为仅内置命令。

source() {
echo "sourcing $1"
builtin source "$1"
}

为了让它在不考虑shell的情况下工作,您可以使用以下内容:

#!/usr/bin/env sh
source() {
echo "sourcing $1"
. "$1"
}
source "$1"