Почему `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 , те же рассуждения применяются в связанном вопросе / ответе.

  • Могу ли я обновить все пользователи crontabs?
  • Как проследить процесс для оригинального пользователя?
  • запустить команду с sudo su в скрипте и перенаправить stdin и stdout
  • Как выполнить команду при входе в систему для пользователя системы без домашней папки и личного файла .bashrc?
  • SSH минимальный пользователь прав - su только
  • Почему я могу использовать apt-get, когда я использую «su»?
  • Как я могу имитировать `sudo su - user` в скрипте?
  • переключиться на пользователя sudo с командой AND не работает
  • 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 ...' .

    Interesting Posts

    Установка новых пакетов на старый невосстановленный компьютер

    Как отключить звуковой сигнал по всей системе

    iptables будет соответствовать следующему пакету запроса ICMP в качестве состояния ESTABLISHED после отправки первого пакета ответа

    Логротат на FreeBSD 8

    Xen и формирование трафика

    Уведомление о предупреждениях Nagios отсутствует

    Как определить, когда оболочка принадлежит удаленному сеансу SSH?

    Как сохранить статус последнего выхода после теста

    какая разница между версией src 3. * и 3. * – generic

    После отправки команды завершения сеанс ssh не завершается

    Bash – запуск сценария bash из скрипта ksh

    извлекать символы before () с помощью grep

    неразрешенные зависимости файлов bz * для rpm из источника

    Как найти файлы, которые в последний раз были изменены в каталоге и его подкаталогах?

    Могут ли два устройства Android в другой сети (3g) взаимодействовать с ssh-соединением?

    Linux и Unix - лучшая ОС в мире.