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%servicedo 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,$TERMe talvez definaLC_ALL=C.