![使用 bash 安装脚本时,Debian PATH 行为和“which”结果令人困惑](https://linux22.com/image/1513565/%E4%BD%BF%E7%94%A8%20bash%20%E5%AE%89%E8%A3%85%E8%84%9A%E6%9C%AC%E6%97%B6%EF%BC%8CDebian%20PATH%20%E8%A1%8C%E4%B8%BA%E5%92%8C%E2%80%9Cwhich%E2%80%9D%E7%BB%93%E6%9E%9C%E4%BB%A4%E4%BA%BA%E5%9B%B0%E6%83%91.png)
我安装了 Raspbian Jessie,它附带了 node v0.X,这是 Raspbian 存储库中可用的最新版本的 node。所以我编写了一个安装 v6.7.0 的脚本:
#!/bin/bash
sudo apt-get remove nodejs node
if [ ! $(command -v node) ]; then
mkdir -p ~/tmp
pushd ~/tmp
if [ ! -d node-v6.7.0-linux-armv6l ]; then
if [ ! -f node-v6.7.0-linux-armv6l.tar.xz ]; then
wget https://nodejs.org/dist/v6.7.0/node-v6.7.0-linux-armv6l.tar.xz
fi
tar -xJf node-v6.7.0-linux-armv6l.tar.xz
fi
cp -R node-v6.7.0-linux-armv6l/* /usr/local/
popd
fi
但是当我跑步时node -v
我得到了这个:
-bash:/usr/bin/node:没有此文件或目录
当我运行时,which node
我没有得到任何输出。 - 并且脚本从未执行if
分支,因此不会下载节点并且不会放入任何内容/usr/local
。
如果我使用 aptitude 卸载了 nodejs,为什么它仍然在查找/usr/bin/node
?
我检查了PATH
变量,它同时具有/usr/local/bin
和/usr/local/sbin
。
我如何修改脚本以使其按预期工作?
答案1
可能存在指向某个缺失文件的符号链接 /usr/bin/node。使用 检查ls -alp /usr/bin/node
。/etc/alternatives 等可能有问题。
您无需删除任何使用 apt 安装的包来安装新版本的 Node。
如果您想以可行的方式安装 Node,请参阅我的教程:
顺便说一下,它解释了如何正确安装 Node 6.7.0 - 只需将版本更改为您需要的版本即可。
不要使用您已有的脚本 - 它可能因多种原因而失败 - 例如,当您在 /tmp 中拥有 node-v6.7.0-linux-armv6l 时,或者如果您在 /tmp 中已经有 node-v6.7.0-linux-armv6l.tar.xz,或者如果您在 /usr/bin 中有一个符号链接等。请按照我在二进制包教程中描述的方式手动执行。只需将文件名更改为您需要的版本 - 例如,如果您想要 ARM 的 6.7.0,则为 node-v6.7.0-linux-armv6l.tar.gz。