过去,我们使用“哪个”命令来获取计算机上相关软件的信息,例如:
which python
which git
但是现在看来在我的MacOS Mojave上不起作用。我的设置有什么问题吗?
新版: 结果将是这样
AA:~ AA$ which python
/usr/bin/which: illegal option -- -
usage: which [-as] program ...
新版2:
AA:~ AA$ type --all which
which is aliased to `alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
which is /usr/bin/which
AA:~ AA$ type -all python
python is /Users/AA/anaconda3/bin/python
python is /Users/AA/anaconda/bin/python
python is /usr/bin/python
AA:~ AA$
答案 0 :(得分:2)
别名是导致错误消息的原因。显然,别名定义对于您的系统来说是错误的。目前尚不清楚该别名是由什么定义的,为什么呢?在几个级别上似乎是错误的,所以我怀疑它是否是标准安装的一部分。
您可以使用unalias which
删除别名;但是我猜它是在您的一个启动文件中定义的,应该从那里删除-此后,下次登录时它应该永久消失。
但是无论如何,您不应该使用which
-最好习惯于POSIX标准命令type
。它是专门为取代which
而引入的,但显然仍然很难从人们的脑海中根除旧命令。
答案 1 :(得分:0)
对我来说,这是yarn global upgrade
中的某项替换了系统/usr/bin/which
的情况。
/usr/bin/which -> ../local/share/.config/yarn/global/node_modules/.bin/which
由于您的错误消息与该程序中的文本字符串完全相同,因此您的问题很可能来自相似的来源。
console.error('which: illegal option -- ' + flag)
console.error('usage: which [-as] program ...')
“已修复”,并通过系统的程序包管理器(例如which
)重新安装了sudo dnf reinstall which
。现在,这可能会干扰依赖于此的任何JavaScript程序包,但是我计划删除这些全局变量,所以我不会发现。
更好的修补程序:我觉得我的系统现在很脏,需要检查所有bin文件...比较/usr/local/share/.config/yarn/global/node_modules/.bin
中的所有内容,以查看{{ 1}}看起来很容易找到其他干扰点。
/usr/bin
然后可以使用以下命令对照系统的软件包管理器进行检查。然后根据需要重新安装。
for x in $(ls /usr/local/share/.config/yarn/global/node_modules/.bin/*); do
ls -l /usr/bin/"$(basename "${x}")"
done
更多:
我似乎很奇怪,它会破坏现有的系统程序。至少,我希望它改用sudo dnf info ...
sudo dnf provides ...
。额外的系统和类似系统的程序包管理似乎是why they have done away,纱线2(浆果)中有/usr/local/bin
。
我为yarn global
和sudo yarn global list
使用了不同的软件包。也许在某个时候使用yarn global list
是我的错误吗?
P.S。感谢@ tripleee,我不知道sudo
。我已经看到了尝试处理不同的type
程序和which
的不同版本的各种其他方式,以及诸如which
(和其他我已经忘记的)的替代方式,但是test
看起来值得尝试。
P.P.S。恼人地发现此操作系统已配置为运行制表符补全。
P.P.P.S。是的,我知道使用输出type
编写脚本是一种坏习惯。