У меня есть команда в $PATH, но она не распознается, когда я использую sudo

У меня есть команда в $PATH, но она не распознается, когда я использую sudo

Я использую Ubuntu 14.04. У меня возникли проблемы с получением команды в моем $PATH с помощью sudo. Я добавил это в мой файл /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

Я вышел из системы и снова вошел в систему как мой пользователь с привилегиями sudo. Затем я пытаюсь запустить команду в $PATH, но получаю сообщение «команда не найдена» …

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

Обратите внимание, что когда я вывожу $PATH, я получаю именно тот PATH, где находится команда «gem». Что еще мне нужно сделать, чтобы моя команда «gem» была распознана, когда я запускаю ее как пользователь sudo?

Редактировать:Сохранение-env не сработало. Вот что произошло…

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

Редактировать 2:вывод 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

решение1

По умолчанию sudo сбрасывает переменные среды в целях безопасности, проверьте следующую строку в /etc/sudoers

Defaults    env_reset

Переменная PATH сбрасывается до значения «secure_path».

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

Можешь попробовать

sudo env "PATH=$PATH" [command]для сохранения пути sudo -E не сработало.

Лучшее объяснение можно найтиздесь

решение2

использовать

sudo --preserve-env

-E, --preserve-env Указывает политике безопасности, что пользователь хочет сохранить свои существующие переменные среды. Политика безопасности может вернуть ошибку, если у пользователя нет разрешения на сохранение среды.

Связанный контент