sudo не сохраняет PS1

Конфигурация ниже находится в моем /etc/sudoers :

 Defaults !visiblepw Defaults always_set_home Defaults env_reset Defaults env_keep = "COLORS EDITOR DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS" Defaults env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE" Defaults env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES" Defaults env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE" Defaults env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY" Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin 

Когда я sudo su мой PS1 терминал меняет систему по умолчанию; игнорируя мою настройку .bashrc PS1 . Как я могу это исправить, чтобы переменные среды не терялись при sudo su ing?

Weird; он экспортирует EDITOR но по какой-то причине он не экспортирует PS1 ; это похоже на то, что он сильно переопределен; как я могу это остановить?

Когда я запускаю sudo -V перечисляются переменные для хранения PS1 ; он не указан в переменных для удаления.

Не используйте sudo su . Это злоупотребление / бесполезное использование su . Собственным эквивалентом является sudo -s .

Если вы хотите сохранить переменные среды, вы хотите sudo -Es .


Если вы обнаружите, что $PS1 все еще меняется, у вас, вероятно, есть скрипт. Вы можете узнать, где: sudo -Es $SHELL -x и чтение результатов.

Год или два назад авторы и сторонники пакета системных оболочек Unix согласились с тем, что обычно лучше не export PS1 (из-за огромных различий синтаксиса между различными оболочками в сочетании с определенным «взрывным» поведением некоторых оболочек, когда они снабжены подсказки других оболочек). Мы все договорились о переносе инициализации PS1 в файлы запуска интерактивной оболочки, то есть ~/.mkshrc , ~/.kshrc , ~/.bashrc и т. Д.

Отказ от ответственности: Я разработчик mksh.

PS1 , вероятно, инициализируется при запуске оболочки. Т.е. значение действительно сохраняется sudo но потом перезаписывается оболочкой.

Обычно вы можете явно указать исходный файл $ENV для оболочки при вызове. Например, вам может быть повезло со следующим:

 sudo ENV=/home/$USER/.bashrc su 

В противном случае вы также можете попробовать что-то вроде:

 sudo su -c "exec </dev/tty ENV="~/.bashrc" bash -i"