执行 wine != 执行 `which wine`

Executing wine != executing `which wine`

我有一个 "funny" 问题,其中 运行 wine 以两种不同的方式导致:

$> wine --version
/Applications/Wine.app/Contents/Resources/bin/wine: No such file or directory

$> `which wine` --version
wine-1.8

很久以前我在 Applications 有一个 wine 安装,但现在没有了。当前(工作)安装是通过 Homebrew 安装的。我找不到任何环境变量弄乱我的路径或类似的。

任何可能导致这种烦恼的建议?

使用 the bash type builtin or command -v 而不是 which 来确定当命令为 运行 时您的 shell 将实际执行的操作。 (不要按照您的问题建议的方式使用其中任何一个的输出来形成另一个命令;如果 which 的输出包含带有 space 的目录名称、易于扩展的 glob 文字或类似内容)。

which 告诉您 PATH 中的第一个是什么,但由于它是一个外部工具而不是 shell 的一部分,它不知道依赖于 shell 的行为状态。 (想想别名、函数、散列查找等)。

如果您有别名,您可能会看到如下内容:

$ type wine
wine is aliased to `/Applications/Wine.app/Contents/Resources/bin/wine'
$ command -v wine
alias wine='/Applications/Wine.app/Contents/Resources/bin/wine'

...或者,对于函数:

$ type wine
wine is a function
wine ()
{
    /Applications/Wine.app/Contents/Resources/bin/wine "$@"
}
$ command -v wine
wine