Eu tenho um script que executa alguns comandos baseados em um usuário git
comonpm
#!/bin/sh
/bin/su someuser -c "
cd /opt/app1/;
env -i git remote update;
env -i git pull origin dev;
cd /opt/app1/client/;
npm run build;
"
Os git
comandos são executados corretamente. O npm
comando executa e cria os arquivos, mas gera muitos erros sobre
Node Sass could not find a binding for your current environment: Linux 64-bit with Node.js 8.x
Found bindings for the following environments:
- Linux 64-bit with Node.js 9.x
This usually happens because your environment has changed since running `npm install`.
Run `npm rebuild node-sass --force` to build the binding for your current environment.
Se eu executar npm run build
como usuário do terminal, tudo funcionará bem. Eu até tentei env -i npm run build
no script e isso apenas diz env: ‘npm’: No such file or directory
. Então eu tentei env -i /usr/local/bin/npm run build
e estranhamente isso retornou /usr/bin/env: 'node': No such file or directory
.
Eu pensei que isso user -c
me configuraria com todos os env como se o usuário estivesse logado e isso env -i
me deixaria limpo env
sem o pai.
também tentei:
#!/bin/sh
/bin/su someuser - -c "
cd /opt/app1/;
git remote update;
git pull origin dev;
cd /opt/app1/client/;
npm run build;
"
Essa última tentativa retorna o mesmo que a primeira: comandos git funcionam, build lança erros sobre sass e ambiente como se algo fosse diferente de quando eu executo o comando como usuário do terminal.
Alguma idéia de por que este comando não está funcionando corretamente?
Pela sugestão de Olorin de examinar o erro do nó, explorei isso mais. Apesar do fato
node -v
desomeuser
estar retornandov9.4.0
e olocate
comando não encontrar nenhumav8
versão instalada para nenhum usuário e de ter reinstaladonode
, eu ainda recebia o mesmo erro. O seguinte comando funciona. Note osource ~/.nvm/nvm.sh;
A certa altura
nvm use v9.5.0
, testei e ainda funciona sem ele. Em seguida, removisource ~/.nvm/nvm.sh;
e quebrou novamente. Então, aparentemente, onvm
não está disponívelshell-scripts
env
sem procurá-lo enpm run build
precisa vernvm
.Problema estranho e parece que alguns usuários tiveram problemas semelhantes ao usar
nvm
recursos combash
base neste tópico . Ainda não tenho certeza de onde estava tirando issov8
. A menos que estivesse obtendov8
doinclude/node
diretório dev9
instalações. Exemplo:env -i
limpa o ambiente e isso inclui aPATH
variável, que é usada para procurar comandos se você não fornecer o caminho completo. Portanto, comenv -i
, você precisa especificar o caminho completo para os comandos que estão sendo invocados. Comnpm
o , o que provavelmente acontece é quenpm
em si é um script que tem#! /usr/bin/env node
como shebang, então a busca pelonode
comando falha.Se você precisar limpar o ambiente, tente um dos seguintes:
sudo -iu someuser sh -c "...."
su someuser - -c "...."
(ambos os comandos iniciam os shells de login com alguma limpeza do ambiente)ou, com
env
, mantenha algumas variáveis de ambiente, como oservice
comando Ubuntu faz:Você provavelmente não precisa de todos eles, mas mantenha
$PATH
,$TERM
e talvez definaLC_ALL=C
.