Я вошел на свой Linux-сервер (Redhat AS4) через SSH как пользователь 'гость', затем запустил команду echo $PATH
, а на выходе /usr/local/bin:/bin:/usr/bin
.
Однако когда я запускаю команду su - guest
чтобы переключиться на того же пользователя, затем выполните команду echo $PATH
, вывод становится /usr/bin:/bin:/usr/local/bin
.
Почему один и тот же пользователь имеет другое значение PATH на сервере Linux? Это заставляет меня получать разные версии Python, и я не знаю, что вызывает эту проблему.
В двух случаях используются разные сценарии (выполняющие разные манипуляции с PATH).
Поскольку вы используете -
вариант su
должен быть источником вашего сценария входа в систему, а ssh
не должна.
Я не знаю, какое именно поведение вы хотите, но, возможно, вы могли бы проверить, есть ли su options (например, -m, --preserve-environment: не сбрасывать переменные среды) может помочь?
Проверьте поля ENV_SUPATH и ENV_PATH в /etc/login.def
Для хорошей практики создания сценариев не полагайтесь на переменную PATH для выполнения команды, поскольку она неоднозначна.
Попробуйте выполнить отладку, используя технику, описанную в мой ответ на суперпользователе, используя
debug_msg "running ~/.bashrc ($0), PATH = '$PATH'"
и аналогичные для / etc / bashrc, / etc / profile и т. д.
Это происходит так:
В / etc / passwd, где идентификатор пользователя определяется как домашний каталог и оболочка по умолчанию:
auser:!:97:51::/home/user:/usr/bin/ksh
Когда пользователь регистрируется в 'ksh' или bash, или что-то еще, что запускается, он выбирает PATH по умолчанию из файла '/ etc / environment' (а некоторые оболочки запускают файл инициализации всей системы), но он также будет запустите команды из начального сценария в домашнем каталоге, в приведенном выше случае - это файл .kshrc.
Таким образом, PATH может быть установлен с помощью начальной команды, общесистемных настроек для этой начальной команды и «скрытых» файлов .rc в домашнем каталоге пользователя.
«Su -» не запускает тот же набор начальных команд, поскольку при входе в систему используются только настройки по умолчанию из файла «/ etc / environment».
из su manpage
su is used to become another user during a login session. Invoked with-
out a username, su defaults to becoming the super user. The optional
argument - may be used to provide an environment similiar to what the
user would expect had the user logged in directly.
поэтому вы всегда будете получать разные настройки env для «su» и «su -»