Tenho um comando no meu $PATH, mas ele não está sendo reconhecido quando uso o sudo

Tenho um comando no meu $PATH, mas ele não está sendo reconhecido quando uso o sudo

Estou usando o Ubuntu 14.04. Estou tendo problemas para obter um comando no meu $PATH usando o sudo. Eu adicionei isso ao meu arquivo /root/.profile

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

export PATH=$PATH:/usr/local/rvm/rubies/default/bin

mesg n

Eu efetuei logout e login novamente como meu usuário com privilégios sudo. Então tento executar o comando dentro de $PATH mas recebo um “comando não encontrado”…

daveuser@mymachine:/home/rails/myproject$ sudo gem pristine --all
sudo: gem: command not found
daveuser@mymachine:/home/rails/myproject$ sudo echo $PATH
/usr/local/rvm/gems/ruby-2.3.0/bin:/usr/local/rvm/gems/ruby-2.3.0@global/bin:/usr/local/rvm/rubies/ruby-2.3.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/    bin:/sbin:/bin:/usr/games:/usr/local/games:/usr/local/rvm/bin
daveuser@mymachine:/home/rails/myproject$ sudo which gem
daveuser@mymachine:/home/rails/myproject$ which gem
/usr/local/rvm/rubies/ruby-2.3.0/bin/gem

Observe que quando eu echo $PATH obtenho exatamente o PATH onde reside o comando “gem”. O que mais preciso fazer para que meu comando “gem” seja reconhecido quando executo o comando como usuário sudo?

Editar:O preserve-env não funcionou. aqui está o que aconteceu…

remoteuser@remotemachine:/home/rails/myproject$ sudo --preserve-env gem pristine --all
[sudo] password for remoteuser: 
sudo: gem: command not found

Editar 2:saída de sudo -l

remoteuser@rtemotemachine:/home/rails/myproject$ sudo -l
Matching Defaults entries for remoteuser on rtemotemachine:
    env_reset, mail_badpass, secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User remoteuser may run the following commands on rtemotemachine:
    (ALL : ALL) ALL

Responder1

Por padrão, o sudo redefine as variáveis ​​de ambiente por motivos de segurança, verifique a seguinte linha em /etc/sudoers

Defaults    env_reset

A variável PATH é redefinida para o valor "secure_path".

e.g. Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

Podes tentar

sudo env "PATH=$PATH" [command]preservar o caminho do sudo -E não funcionou.

Uma explicação melhor pode ser encontradaaqui

Responder2

usar

sudo --preserve-env

-E, --preserve-env Indica à política de segurança que o usuário deseja preservar suas variáveis ​​de ambiente existentes. A política de segurança poderá retornar um erro se o usuário não tiver permissão para preservar o ambiente.

informação relacionada