Confundindo o comportamento do PATH do Debian e 'which' resulta com o script de instalação do bash

0

Instalei o Raspbian Jessie, que vem com o nó v0.X, que é a versão mais recente do nó disponível nos repositórios do Raspbian. Então eu fiz um script que instala 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

Mas quando eu corro node -v eu recebo isso:

-bash: /usr/bin/node: No such file or directory

E quando executo which node , não recebo saída. - E o script nunca executa a ramificação if , portanto, o nó não é baixado e nada é colocado em /usr/local .

Se eu desinstalei o nodejs usando o aptitude, por que ele ainda está procurando em /usr/bin/node ?

Eu verifiquei a variável PATH , ela tem /usr/local/bin e /usr/local/sbin .

Como posso modificar o script para funcionar como esperado?

    
por Jodes 22.11.2016 / 11:09

2 respostas

0

Pode haver um link simbólico / usr / bin / node apontando para algum arquivo que está faltando. Verifique com ls -alp /usr/bin/node . Pode haver um problema com / etc / alternatives etc.

Você não precisa remover nenhum pacote instalado com o apt para instalar uma nova versão do Node.

Se você quiser instalar o Node de uma forma que funcione, veja meu tutorial em:

que explica incidentalmente como instalar corretamente o Node 6.7.0 - basta alterar a versão para a que você precisa.

Em vez de usar o script que você tem - que pode falhar por vários motivos - por exemplo, quando você tem o node-v6.7.0-linux-armv6l em / tmp, ou se você já tem o node-v6.7.0-linux- armv6l.tar.xz em / tmp, ou se você tem um link simbólico em / usr / bin etc. faça isso manualmente como eu descrevo no tutorial para os pacotes binários. Basta alterar o nome do arquivo para a versão que você precisa. node-v6.7.0-linux-armv6l.tar.gz se você quiser 6.7.0 para o ARM.

    
por 22.11.2016 / 11:22
0

O problema é que o bash o executou anteriormente, então tem uma versão com hash em seu cache. Você pode ler mais sobre isso aqui .

Você pode confirmar isso executando

type node

e se você vir algo como

node is hashed (/usr/bin/node)

então este é realmente o problema.

Você pode limpar todos os hashes com hash -r ou apenas este com hash -d node

Como um aparte, which é realmente uma ferramenta que foi escrita para csh , e há casos extremos em que ela não funciona como esperado em bash . Considere usar type -p e command -v para encontrar locais com bash e obter uma anotação realmente excelente sobre isso aqui

    
por 22.11.2016 / 18:28