env -i
limpa o ambiente, e isso inclui a variável PATH
, que é usada para procurar comandos se você não fornecer o caminho completo. Portanto, com env -i
, você precisa especificar o caminho completo para os comandos que estão sendo chamados. Com npm
, o que provavelmente acontece é que npm
em si é um script que tem #! /usr/bin/env node
como shebang, portanto, a procura pelo comando node
falha.
Se você precisar limpar o ambiente, tente uma das seguintes opções:
-
sudo -iu someuser sh -c "...."
-
su someuser - -c "...."
(esses dois comandos iniciam shells de login com alguma limpeza do ambiente) -
ou, com
env
, retém algumas variáveis de ambiente, como o comando%service
do Ubuntu:$ grep env $(command -v service) -m1 out=$(env -i LANG="$LANG" LANGUAGE="$LANGUAGE" LC_CTYPE="$LC_CTYPE" LC_NUMERIC="$LC_NUMERIC" LC_TIME="$LC_TIME" LC_COLLATE="$LC_COLLATE" LC_MONETARY="$LC_MONETARY" LC_MESSAGES="$LC_MESSAGES" LC_PAPER="$LC_PAPER" LC_NAME="$LC_NAME" LC_ADDRESS="$LC_ADDRESS" LC_TELEPHONE="$LC_TELEPHONE" LC_MEASUREMENT="$LC_MEASUREMENT" LC_IDENTIFICATION="$LC_IDENTIFICATION" LC_ALL="$LC_ALL" PATH="$PATH" TERM="$TERM" "$SERVICEDIR/$SERVICE" status 2>&1)
Você provavelmente não precisa de todos, mas mantenha
$PATH
,$TERM
e talvez definaLC_ALL=C
.