sudo는 PS1을 유지하지 않습니다

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설정이 무시됩니다. ing 시 환경 변수가 손실되지 않도록 이 문제를 어떻게 해결할 수 있습니까 sudo su?

이상합니다. 수출 중인데 EDITOR어떤 이유로 PS1강제로 수출되지 않는 경우가 있습니다.

sudo -V유지할 변수를 실행하면 PS1삭제할 변수에 나열되지 않습니다.

답변1

을 (를) 사용하지 마십시오 sudo su. 이것은 모욕적이거나 쓸모없는 사용입니다 su. 올바른 값은 입니다 sudo -s.

환경 변수를 보존하려면 sudo -Es.


상황이 여전히 변경되고 있는 경우 $PS1해당 작업을 수행하는 스크립트가 있을 것입니다. sudo -Es $SHELL -x출력을 실행하고 읽으면 위치를 알 수 있습니다 .

답변2

1~2년 전, Unix 시스템 쉘 작성자와 패키지 관리자는 일반적으로 다음을 수행하는 것이 최선이라는 데 동의했습니다.아니요 export PS1(다양한 쉘 사이의 큰 구문 차이와 다른 쉘에 대한 프롬프트를 제공할 때 일부 쉘의 "폭발적인" 동작으로 인해) 우리 모두는 PS1초기화를 대화형 셸 시작 파일 (예: ~/.mkshrc~/.kshrc) 로 옮기는 데 동의했습니다.~/.bashrc

면책조항: 저는 mksh 개발자입니다.

답변3

$ENV일반적으로 셸을 호출할 때 셸의 소스 파일을 명시적으로 설정할 수 있습니다 . 예를 들어, 다음과 같은 행운이 있을 수 있습니다.

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

실패하면 다음을 시도해 볼 수도 있습니다.

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

답변4

PS1아마도 쉘이 시작될 때 초기화되었을 것입니다. 즉, 값은 실제로 쉘에 의해 유지되지만 sudo이후에 쉘에 의해 덮어쓰여집니다.

관련 정보