Я установил Raspbian Jessie, который поставляется с узлом v0.X - последняя версия узла, доступная в репозиториях Raspbian. Поэтому я сделал скрипт, который устанавливает 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 .

Если я удалил nodejs с помощью aptitude, почему он все еще смотрит в /usr/bin/node?

Я проверил переменную PATH , она имеет /usr/local/bin и /usr/local/sbin .

Как я могу изменить скрипт, чтобы он работал как положено?

2 ответа2

0

Там может быть символическая ссылка /usr /bin /node, указывающая на какой-то файл, который отсутствует. Проверьте это с помощью ls -alp /usr/bin/node . Может быть проблема с /etc / альтернативами и т.д.

Вам не нужно удалять пакет, установленный с помощью apt, чтобы установить новую версию Node.

Если вы хотите установить Node таким образом, чтобы он работал, см. Мой учебник по адресу:

что кстати объясняет, как правильно установить Node 6.7.0 - просто измените версию на ту, которая вам нужна.

Вместо того, чтобы использовать тот скрипт, который у вас есть - он может потерпеть неудачу по нескольким причинам - например, если у вас есть node-v6.7.0-linux-armv6l в /tmp или если у вас уже есть node-v6.7.0-linux-armv6l.tar .xz в /tmp, или если у вас есть символическая ссылка в /usr /bin и т. д., сделайте это вручную, как я описал в руководстве для бинарных пакетов. Просто измените имя файла на нужную версию - например, node-v6.7.0-linux-armv6l.tar.gz, если вы хотите 6.7.0 для ARM.

0

Проблема, вероятно, в том, что bash запускал его ранее, поэтому в его кеше есть хешированная версия. Вы можете прочитать больше об этом здесь.

Вы можете подтвердить это, запустив

type node

и если вы видите что-то вроде

node is hashed (/usr/bin/node)

тогда это действительно проблема.

Вы можете очистить все хеши с помощью hash -r или только с помощью hash -d node

Как и в сторону, which на самом деле является инструментом , который был написан для csh и есть крайние случаи , когда он не работает , как ожидалось в bash Подумайте об использовании type -p и command -v чтобы найти места с помощью bash и получить действительно превосходную информацию об этом здесь

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .