Não, sudo
não preserva sua variável de ambiente $PATH
por motivos de segurança. Em vez disso, ele é substituído por um secure_path
definido em /etc/sudoers
, que você não deve alterar.
$ sudo grep secure_path /etc/sudoers
Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"
Você acredita ter verificado que a variável $PATH
permanece a mesma com seu comando
sudo echo $PATH
mas, na verdade, o Bash expande as variáveis antes de começar a executar qualquer comando (aqui o sudo
), o que significa que a linha acima mostra seu próprio valor $PATH
. Para obter um como sudo
, use, por exemplo,
sudo bash -c 'echo $PATH'
O que você pode fazer é, por exemplo resolva o comando que você deseja executar ( node
ou npm
) no shell do seu próprio usuário usando a substituição de processo com which
:
sudo "$(which npm)" install -g angular-cli
sudo "$(which node)" app.js
Isso primeiro executa which npm
ou which node
como seu usuário, o que retorna o caminho absoluto dos executáveis pertencentes aos comandos especificados. Então essa saída é literalmente inserida no seu comando sudo
, então sudo
acredita que ela foi executada com caminhos absolutos como abaixo, removendo a necessidade de procurar algo em $PATH
:
sudo /home/dc/node/bin/npm install -g angular-cli
sudo /home/dc/node/bin/node app.js