Confusion dans le comportement PATH de Debian et les résultats `which` avec le script d'installation bash


0

J'ai installé Raspbian Jessie, livré avec le noeud v0.X, qui est la dernière version du noeud disponible sur les référentiels Raspbian. J'ai donc créé un script qui installe la 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

Mais quand je cours, node -vje reçois ceci:

-bash: / usr / bin / node: aucun fichier ni répertoire de ce type

Et quand je cours which nodeje n’obtiens aucune sortie. - Et le script n'exécute jamais la ifbranche, le nœud n'est pas téléchargé et rien n'est inséré /usr/local.

Si j'ai désinstallé nodejs en utilisant aptitude, pourquoi cherche- /usr/bin/nodet- il toujours ?

J'ai vérifié la PATHvariable, elle a les deux /usr/local/binet /usr/local/sbin.

Comment puis-je modifier le script pour qu'il fonctionne comme prévu?


Avez-vous exécuté node dans le même shell avant de le désinstaller?
user2313067

Réponses:


0

Il peut y avoir un lien symbolique / usr / bin / node pointant sur un fichier manquant. Vérifiez avec ls -alp /usr/bin/node. Il peut y avoir un problème avec / etc / alternatives etc.

Vous n'avez pas besoin de supprimer les paquetages installés avec apt pour installer une nouvelle version de Node.

Si vous souhaitez installer Node d’une manière qui fonctionne, consultez mon tutoriel à l’adresse:

qui explique incidemment comment installer correctement Node 6.7.0 - changez simplement la version pour celle dont vous avez besoin.

Au lieu d'utiliser le script que vous avez, cela peut échouer pour plusieurs raisons, par exemple lorsque vous avez node-v6.7.0-linux-armv6l dans / tmp, ou si vous avez déjà node-v6.7.0-linux-armv6l.tar. .xz dans / tmp, ou si vous avez un lien symbolique dans / usr / bin etc. faites-le manuellement comme je le décris dans le tutoriel pour les paquetages binaires. Changez simplement le nom du fichier avec la version dont vous avez besoin - par exemple, node-v6.7.0-linux-armv6l.tar.gz si vous voulez 6.7.0 pour ARM.


Merci - mais j’ai vraiment besoin de ce script car il est utilisé par un script de configuration différent et très impliqué qui installe un système d’exploitation et un système à partir de rien. Je l'ai eu sur un système d'exploitation qui ne venait pas avec noeud, mais cela ne fonctionne plus maintenant que le système d'exploitation vient avec noeud. (Je traiterai des scénarios d'échec possibles une fois que les bases fonctionneront). J'ai essayé de courir ls -alp /usr/bin/nodecomme tu l'as suggéré mais ça revient ls: cannot access /usr/bin/node: No such file or directory? J'ai aussi couru ls -l /etc/alternatives | grep nodeet ça ne retourne rien non plus?
CL22

@Jodes Voir le tutoriel que j'ai fourni. Il s’agit d’une liste de commandes à exécuter, qui est essentiellement un script si vous l’enregistrez dans un fichier. De plus, j'explique ce que vous devez prendre en compte pour exécuter vos programmes avec les nouvelles versions de Node installées - chemins, variables d'environnement, lignes shebang, etc.
rsp

0

Le problème est probablement dû au fait que bash l’avait précédemment exécuté, de même qu’une version hachée dans son cache. Vous pouvez en lire plus à ce sujet ici .

Vous pouvez le confirmer en lançant

type node

et si vous voyez quelque chose comme

node is hashed (/usr/bin/node)

alors c’est bien le problème.

Vous pouvez effacer tous les hachages avec hash -rou seulement celui-ci avechash -d node

Soit dit en passant, whichc’est vraiment un outil qui a été écrit pour csh, et il ya des cas extrêmes où il ne fonctionne pas comme prévu bash. Pensez à utiliser type -pet command -và trouver des emplacements avec bashet obtenez un très bon compte-rendu ici

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.