Команда не найдена при использовании sudo

На сайте есть несколько вопросов, которые, похоже, связаны с моей проблемой, но я не мог найти решение ни в одном из них.

Моя операционная система – Ubuntu 12.04. У меня есть mvn установленный в /tools/noarch/apache-maven-3.1.1 и я добавил следующие строки в конце моего /etc/profile :

 export M2_HOME=/tools/noarch/apache-maven-3.1.1 export PATH=$M2_HOME/bin:$PATH 

После этого я запускаю source /etc/profile .

Теперь моя проблема: когда я запускаю mvn --version команда преуспевает, и mvn исполняемый файл найден, а если я выполняю: sudo mvn --version я получаю вывод: sudo: mvn: command not found . Я знаю, что PATH может быть другим, когда я выполняю команду с sudo и именно поэтому я пробовал это:

 $>sudo echo $PATH /tools/noarch/apache-maven-3.1.1/bin:... some other stuff ... 

Еще одна вещь, которую я пробовал, – выполнить sudo su - и затем ввести mvn --version . В этом случае mvn успешно найден и команда выполнена успешно. Что здесь происходит?

$PATH оценивается вашей оболочкой, поэтому ваш чек не работает, как вы ожидаете.

/etc/sudoers настроен на замену вашего PATH на стандартный.

sudo не загружает среду оболочки входа перед выполнением команды, поэтому используется PATH по умолчанию из /etc/sudoers . su - открывает оболочку входа, которая включает загрузку /etc/profile . См. man bash , раздел INVOCATION .

Просто удалите сброс PATH в /etc/sudoers . Вероятно, это правило называется secure_path .


CentOS

В CentOS вы можете добавить PATH в раздел Defaults env_keep по Defaults env_keep :

 Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \ LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \ LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \ LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \ LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \ _XKB_CHARSET XAUTHORITY PATH" 

Дайте sudo вашей текущей PATH :

 sudo env "PATH=$PATH" your_command 

Разрабатывая ответ @ opyate, я использую следующий сценарий оболочки (который может быть назван, например, mysudo ):

 #!/bin/bash sudo -E env "PATH=$PATH" "[email protected]" 
  • -E сообщает sudo о сохранении окружающей среды.
  • env "PATH=$PATH" расширяется за пределами sudo вызова, что делает внешний PATH доступным внутри sudo (это требуется в дополнение к -E поскольку PATH обычно получает специальное лечение в дополнение к обработке, получаемой всей средой) ,
  • "[email protected]" Передает аргументы, полученные нашим скриптом в строку sudo .

Сохраните сценарий в файле в каталоге в PATH , дайте ему +x разрешения, et voilà.

У меня была такая же проблема, когда я впервые установил Maven . Проблема была решена после того, как я добавил две строки,

 export M2_HOME=/tools/noarch/apache-maven-3.1.1 export PATH=$M2_HOME/bin:$PATH 

К четырем файлам:

 /root/.bashrc /root/.profile 

И для текущего пользователя ( mehran – мое имя пользователя Ubuntu):

 /home/mehran/.bashrc /home/mehran/.profile 

Вы должны изменить переменную PATH root так же, как вы сделали для себя, то есть добавив эти две строки в профиль sudo, который находится в /root/.bashrc, а затем введите его.

Поскольку текущие ответы немного расплывчаты, конкретная настройка в /etc/sudoers изменяющая ваш путь, – secure_path :

 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 

Вы можете изменить его с помощью sudo visudo или, еще лучше, добавить нужные вам каталоги:

 Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin 
  • Добавить загрузочные записи Windows после установки Ubuntu?
  • Windows 7 Laptop - Truecrypt - Ubuntu?
  • Можно ли маршрутизировать только конкретное приложение через VPN?
  • После загрузки Ubuntu.img на внешний диск я могу настроить загрузку компьютера с этого диска?
  • Прозрачность терминала, проблема с Imagemagick и X11
  • Acer Aspire один разваливается на Ubuntu
  • Aptitude vs. apt-get: Какой из рекомендованных (так называемых «правильных») инструментов использовать?
  • Могу ли я создать пользователя SSH, который может получить доступ только к определенному каталогу?
  • Случайно rsync --delete, / usr влияет, любой способ проверить и переустановить отсутствующий компонент?
  • Нет звука (USB-динамики) в Ubuntu 9.04 Jaunty Jackalope
  • Как я могу использовать квоты в самбе?
  • Давайте будем гением компьютера.