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

  • su или sudo - как узнать, какой из них будет работать?
  • bash: невозможно установить группу терминальных процессов (-1): неприемлемо ioctl для устройства
  • Привязать каталог как меня
  • Почему root не является источником .bash_profile?
  • Есть ли графический инструмент sudo (kdesudo, gksudo, su-to-root, ...), который работает без пароля?
  • Linux / CentOS - не может быть после изменения права собственности
  • Как проследить процесс для оригинального пользователя?
  • Разница между sudo -i и sudo su
  • 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

    Перезаписать часть файла без модификации в немодифицированный контент

    Команда запускалась как неправильный пользователь при загрузке, в то время как явно сказано, что она запускается как root

    Как исправить мое развертывание FastCGI Pinax / Django?

    Что такое формат UUID, используемый LVM?

    Как объединить 2 файла PDF с порядком перемежения страниц?

    Как построить таблицу разделов только для GPT в Linux?

    ext4 – исчезла целая директория?

    Только цветные файлы в соответствии с типами файлов?

    Обновление программного обеспечения Fedora GUI несовместимо с обновлением командной строки dnf

    "Nmcli nm wifi on" останавливает hostapd

    Запуск команды в новом окне терминала через Python

    Пост-скрипт не запускается после установки

    Тестирование, из сценария, если звуковые устройства молчат?

    Lenovo Thinkpad T440s Fedora 20 Проблема аутентификации WiFi

    Каков способ POSIX для чтения точного количества байтов из файла?

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