哪个命令在我的计算机上不起作用

时间:2019-06-09 08:03:54

标签: macos macos-mojave

过去,我们使用“哪个”命令来获取计算机上相关软件的信息,例如:

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$

2 个答案:

答案 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 globalsudo yarn global list使用了不同的软件包。也许在某个时候使用yarn global list是我的错误吗?


P.S。感谢@ tripleee,我不知道sudo。我已经看到了尝试处理不同的type程序和which的不同版本的各种其他方式,以及诸如which(和其他我已经忘记的)的替代方式,但是test看起来值得尝试。

P.P.S。恼人地发现此操作系统已配置为运行制表符补全。

P.P.P.S。是的,我知道使用输出type编写脚本是一种坏习惯。