我刚安装了 centos 7,里面只有一些 nodejs 项目。然后我发现which
命令无法正常工作。
# which ls
which: illegal option -- -
usage: which [-as] program ...
# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
但这有效:
# /usr/bin/which ls
/usr/bin/ls
然后我执行了一下cat /usr/bin/which
,发现它已经被替换成nodejs程序了!
#!/usr/bin/env node
var which = require("../")
if (process.argv.length < 3)
usage()
function usage () {
console.error('usage: which [-as] program ...')
process.exit(1)
}
... ...
which
命令是一个节点程序
# ls -la /usr/bin/which
lrwxrwxrwx 1 root root 63 Jul 5 20:43 /usr/bin/which -> ../local/share/.config/yarn/global/node_modules/which/bin/which
我非常困惑,nodejs 为什么要取代一个完美运行的系统命令呢?
现在的问题是,修复它的正确方法是什么?我可以删除该文件并which
从另一台计算机(vm)复制吗?
更新:
这是我安装 nodejs 和 yarn 的方法。其他模块安装在项目目录中。
curl --silent --location https://rpm.nodesource.com/setup_6.x | bash -
yum install nodejs
sudo wget https://dl.yarnpkg.com/rpm/yarn.repo -O /etc/yum.repos.d/yarn.repo
yum install yarn
yarn global add nuxt
yarn global add cross-env
npm install pm2 -g
答案1
我在 Fedora 中安装 yarn 时遇到了同样的问题。
我意识到这个命令哪个,不使用绝对路径调用,实际上是一个别名。
# alias which
alias which='(alias; declare -f) | /usr/bin/which --tty-only --read-alias --read-functions --show-tilde --show-dot'
在 Fedora 中使用以下 rpm 命令,我还可以确认/usr/bin/哪个软链接已被替换。
# rpm -V which
....L.... /usr/bin/which
我重新安装后解决了这个问题哪个包裹。
sudo yum reinstall which
我不认为这是正确的,nodejs 应该取代一个重要的系统程序,所以对于客人来说,这是nodejs开发团队的一个问题。
附言:抱歉我的英语不好。