Zsh 为什么`哪个`打印脚本?

Zsh 为什么`哪个`打印脚本?,zsh,Zsh,哪个conda或哪个-a conda打印出conda.sh的内容,该脚本选择conda可执行文件并运行它,如下(1)所示 我希望打印conda的路径。这可能是也可能不是这个conda.sh,但无论如何我都不希望看到脚本的内容 只需运行conda即可正确打印出conda的帮助文本,如下(2) 路径正确地在开头包含conda的目录,如(3) 这是Mac上的zsh (一) (二) (三) /Users/user1/miniconda3/bin:/Users/user1/miniconda3/cond

哪个conda
哪个-a conda
打印出
conda.sh
的内容,该脚本选择conda可执行文件并运行它,如下(1)所示

我希望
打印conda的路径。这可能是也可能不是这个
conda.sh
,但无论如何我都不希望看到脚本的内容

只需运行
conda
即可正确打印出conda的帮助文本,如下(2)

路径
正确地在开头包含conda的目录,如(3)

这是Mac上的zsh

(一)

(二)

(三)


/Users/user1/miniconda3/bin:/Users/user1/miniconda3/condabin:/Users/user1/gcloud/google cloud sdk/bin:/Users/user1/miniconda3/bin:/usr/local/opt/terraform@0.13/bin:/Users/user1/.krew/bin:/Users/user1/bin:Library/Python/3.7/bin:/Users/user1/bin:/usr/local/bin:/Library/Frameworks/Python.framework/Versions/3.9/bin:/Library/Frameworks/Python。framework/Versions/3.8/bin:/usr/local/bin:/usr/sbin:/sbin:/usr/local/go/bin:/usr/local/munki:/Library/Apple/usr/bin:/Applications/Wireshark.app/Contents/MacOS:/usr/bin:/usr/local/bin:/usr/X11/bin:/usr/local/bin:/Users/Users/user1/go/bin:/Users/user1/executables/apache-maven-3.6.3/Users/user1/.local/bin
使用
-p
标志:

%哪个pyenv
pyenv(){
地方指挥部
command=“${1:-}”
如果[“$#”-gt 0]
然后
转移
fi
中的大小写“$command”
(rehash|shell)eval“$”(pyenv“sh-$命令“$”);;
(*)命令pyenv“$command”“$@”;;
以撒
}
%哪个-p pyenv
/usr/local/bin/pyenv
% 
但是请注意,在Zsh上,您可以使用
whence
命令获得更多信息输出:

%aSv pyenv从哪里来
pyenv是/Users/marlon/.cache/zsh snap/eval/pyenv-init.zsh中的一个shell函数
pyenv是/usr/local/bin/pyenv->/usr/local/bin/。/cillar/pyenv/2.0.0/bin/pyenv->/usr/local/cillar/pyenv/2.0.0/bin/。/libexec/pyenv
%

man which
中找不到
-p
标志的原因是,在Zsh中,
which
是一个内置命令,相当于
whence-c

%where-aSv which
哪一个是贝壳内置的
哪个是/usr/bin/which
%
如果执行
man which
,则会获得外部命令
which
(在上面输出的第二行)的手册。您可以按如下方式调用后者:

%命令哪个pyenv
/usr/local/bin/pyenv
%
不过,
的输出更可靠。外部命令
,它只搜索您的
$path
,其结果可能是您在命令行上键入命令时调用的结果,也可能不是<另一方面,code>whence-aSv
,准确地告诉您将调用什么(第一行)以及有什么替代方案

有关更多信息,请参阅Zsh手册:


谢谢。以后我会试试从哪里来。你能解释一下
-p
开关吗?我没有在
人身上看到它,也没有在@JoshuaFox这样的网页上看到它,我更新了我的答案来解释。我明白了,所以我的困惑是因为
哪个
在这里实际上是
从哪里来的
@MarlonRichert:你的解释真的很有用,但是它没有解释为什么OPs内置了显示脚本内容的插件。例如,在我的zsh中,
哪个脚本
只显示脚本的绝对路径,而不是内容。行为是否取决于zsh版本?我有5.8。@user1934428 OP的
conda
不是一个脚本,而是一个函数。函数被加载到内存中。脚本不是。
conda () {
    if [ "$#" -lt 1 ]
    then
        "$CONDA_EXE" $_CE_M $_CE_CONDA
    else
        \local cmd="$1"
        shift
        case "$cmd" in
            (activate | deactivate) __conda_activate "$cmd" "$@" ;;
            (install | update | upgrade | remove | uninstall) CONDA_INTERNAL_OLDPATH="${PATH}"
                __add_sys_prefix_to_path
                "$CONDA_EXE" $_CE_M $_CE_CONDA "$cmd" "$@"
                \local t1=$?
                PATH="${CONDA_INTERNAL_OLDPATH}"
                if [ $t1 = 0 ]
                then
                    __conda_reactivate
                else
                    return $t1
                fi ;;
            (*) CONDA_INTERNAL_OLDPATH="${PATH}"
                __add_sys_prefix_to_path
                "$CONDA_EXE" $_CE_M $_CE_CONDA "$cmd" "$@"
                \local t1=$?
                PATH="${CONDA_INTERNAL_OLDPATH}"
                return $t1 ;;
        esac
    fi
}
conda
usage: conda [-h] [-V] command ...

conda is a tool for managing and deploying applications, environments and packages.

Options:

positional arguments:
  command
    clean        Remove unused packages and caches.
    compare      Compare packages between conda environments.