哪个命令在我的电脑上不起作用
which command doesn't work on my computer
以前我们都是通过'which'命令获取电脑上相关软件的信息,比如:
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$
别名是导致错误消息的原因。显然,别名定义对于您的系统来说是错误的。目前尚不清楚是什么定义了这个别名或为什么;它在几个层面上似乎是错误的,所以我怀疑它是标准安装的一部分。
您可以使用 unalias which
删除别名;但我猜它是在你的一个启动文件中定义的,应该从那里删除 - 在这一点之后,它应该在你下次登录时永远消失。
但无论如何,您不应该使用 which
- 最好让自己习惯 POSIX 标准命令 type
。它是专门为取代 which
而引入的,但显然仍然很难从人们的脑海中根除旧命令。
对我来说,这是 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
中的所有内容,看看它是否有/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 ...
更多:
我觉得它会破坏现有的系统程序,这让我觉得很奇怪。至少,我希望它使用 /usr/local/bin
代替。那个额外的系统和 system-like 包管理似乎是 why they have done away with yarn global
in yarn 2 (berry).
我有 sudo yarn global list
和 yarn global list
的不同包。也许在某些时候使用 sudo
是我的错误?
P.S。感谢 @tripleee,我不知道 type
。我已经看到了尝试处理不同 which
程序和不同版本 which
的各种其他方法,以及 test
等替代方法(以及我忘记的其他方法),但是 type
看起来值得尝试作为替代品。
P.P.S。烦人地发现这个 OS 被配置为 运行 制表符完成,通过它。
P.P.P.S。是的,我知道使用输出 ls
编写脚本是一个坏习惯。
以前我们都是通过'which'命令获取电脑上相关软件的信息,比如:
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$
别名是导致错误消息的原因。显然,别名定义对于您的系统来说是错误的。目前尚不清楚是什么定义了这个别名或为什么;它在几个层面上似乎是错误的,所以我怀疑它是标准安装的一部分。
您可以使用 unalias which
删除别名;但我猜它是在你的一个启动文件中定义的,应该从那里删除 - 在这一点之后,它应该在你下次登录时永远消失。
但无论如何,您不应该使用 which
- 最好让自己习惯 POSIX 标准命令 type
。它是专门为取代 which
而引入的,但显然仍然很难从人们的脑海中根除旧命令。
对我来说,这是 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
中的所有内容,看看它是否有/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 ...
更多:
我觉得它会破坏现有的系统程序,这让我觉得很奇怪。至少,我希望它使用 /usr/local/bin
代替。那个额外的系统和 system-like 包管理似乎是 why they have done away with yarn global
in yarn 2 (berry).
我有 sudo yarn global list
和 yarn global list
的不同包。也许在某些时候使用 sudo
是我的错误?
P.S。感谢 @tripleee,我不知道 type
。我已经看到了尝试处理不同 which
程序和不同版本 which
的各种其他方法,以及 test
等替代方法(以及我忘记的其他方法),但是 type
看起来值得尝试作为替代品。
P.P.S。烦人地发现这个 OS 被配置为 运行 制表符完成,通过它。
P.P.P.S。是的,我知道使用输出 ls
编写脚本是一个坏习惯。