Почему `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 ...' .

  • Ошеломление задержки аутентификации при неудачных `su` или` sudo`
  • Почему sudo su работает, но su нет?
  • Я не могу войти как root с командой su, но я могу с SSH
  • Команда: должна запускаться с терминала
  • Как использовать sudo в Fedora?
  • SUID случайно удален из файла / bin / su
  • Запросить пароль для пароля при использовании команды su
  • Изменение переменной PATH для процесса, выполняемого как пользователь в Linux
  • запускать экран после «su'ing для конкретного пользователя
  • Есть ли графический инструмент sudo (kdesudo, gksudo, su-to-root, ...), который работает без пароля?
  • su vs sudo -s vs sudo -i vs sudo bash
  • Передавать аргументы команде, запущенной другим пользователем
  • Linux и Unix - лучшая ОС в мире.