Почему `sudo su -l -c" java "` работает, даже если `sudo su -l -c 'echo $ PATH" `отображает местоположение двоичного файла java?

У меня есть сервер с двоичными файлами Java из tarball в настраиваемом месте, а в /etc/bash.bashrc :

 export JAVA_HOME=/path/to/java/home export PATH=$JAVA_HOME/bin:$PATH 

Когда я запускаю sudo su -l -c "java" , я получаю -su: java: command not found . Однако, когда я sudo su -l напрямую, я могу запускать java без ошибок.

Кроме того, sudo su -l -c "echo $PATH включает в себя местоположение java .

Почему sudo su -l -c "java" не запускается?

EDIT: Несмотря на то, что это /etc/bash.bashrc а не ~/.bashrc , те же рассуждения применяются в связанном вопросе / ответе.

2 Solutions collect form web for “Почему `sudo su -l -c" java "` работает, даже если `sudo su -l -c 'echo $ PATH" `отображает местоположение двоичного файла java?”

dhag объяснил, почему $PATH кажется правильным, хотя это не так.

Причина, по которой путь не изменяется, скорее всего, что su не запускает оболочку в интерактивном режиме, что означает, что либо bash.bashrc не выполняется в первую очередь, либо что он уходит, прежде чем что-либо делать, потому что обнаруживает, что он не работает в интерактивном режиме.

Вам нужно либо указать полный путь вместо имени команды, либо узнать, где установлен путь по умолчанию, и изменить его там.

Когда вы запускаете sudo su -l -c "echo $PATH" , $PATH расширяется в исходной оболочке, потому что двойные кавычки не предотвращают это расширение. Вы хотите, чтобы sudo su -l -c 'echo $PATH' расширялся в оболочке su .

Я предполагаю, что последующий вопрос будет «тогда как я могу запустить java »? Я предлагаю либо вызывать java с полным путем, либо, и это может работать или не работать, вручную пытаясь загрузить надлежащий файл rc, что-то вроде su -c '. /etc/bash.bashrc; java ...' su -c '. /etc/bash.bashrc; java ...' su -c '. /etc/bash.bashrc; java ...' .

  • Как вызывать привилегии root из запроса пароля в окне «Обновление программного обеспечения»?
  • SSH минимальный пользователь прав - su только
  • Переход на суперпользователь при запуске скрипта оболочки
  • Как использовать sudo в Fedora?
  • Не удалось войти в учетную запись: не удалось открыть сеанс
  • Что отличает «su - username», а затем команда и команда «sudo -u username»,
  • su не может выполнить bin / bash / ****
  • Fedora: Как я могу добавить себя в файл sudoers?
  • как передать переменную среды в sudo su
  • Не удается получить пользователя $ HOME поверх su на Solaris и AIX
  • Вывод команды id из команды запуска с "su -c"
  • Linux и Unix - лучшая ОС в мире.