환경 변수가 설정되었지만 존중되지 않습니다.

환경 변수가 설정되었지만 존중되지 않습니다.

다음 동작이 약간 혼란스럽다고 생각합니다. 왜 이런 일이 발생하는지 설명해 주실 수 있나요?

나는 /etc/bash.bashrc다음을 가지고 있습니다 :

EDITOR=vim

물론:

lev@home ~ $ echo $EDITOR
vim

나는 그것을 존중하고 싶다 visudo. 이제 man visudo이 변수가 항상 존중되는 것은 아니라는 것을 읽었 지만 다음이 왜 다른 결과를 제공하는지 이해하지 못합니다.

$ sudo visudo # opens vi
$ sudo EDITOR=vim visudo # opens vim

EDITOR변수는 루트(AFAIU)에도 설정되어야 합니다.

$ sudo echo $EDITOR
vim

또한 (저는 Arch Linux를 사용하고 있습니다)를 AUR사용하여 패키지를 설치 yaourt하고 PKGBUILD 파일을 편집하도록 선택하면 다음이 표시됩니다.

Please add $EDITOR to your environment variables
for example:
export EDITOR="vim" (in ~/.bashrc)
(replace vim with your favorite editor)

==> Edit PKGBUILD with:

따라서 문제는 visudo.변수 세트를 볼 수 있지만 프로그램은 볼 수 없는 이유는 무엇입니까(명령에서 다시 지정하지 않는 한)?

기술적 인 정보:

lev@home ~ $ uname -a
Linux home 3.6.9-1-ARCH #1 SMP PREEMPT Tue Dec 4 08:04:10 CET 2012 x86_64 GNU/Linux
lev@home ~ $ bash --version | head -1
GNU bash, version 4.2.39(2)-release (x86_64-unknown-linux-gnu)

답변1

설정했지만 내보내지 않았습니다. 줄을 다음으로 변경합니다.

export EDITOR=vim

답변2

Chris의 답변에 따라 변수를 하위 프로세스의 기본 환경으로 내보낸 후 현재 환경을 보존하도록 sudo에 지시해야 합니다. 이는 -E전체 환경을 보존하는 sudo 옵션을 통해 수행 할 수 있으며 , 이 특정 경우에는 해당 변수만 보존하기 위해 sudoers 파일 EDITOR에 변수를 추가합니다.env_keep

관련 정보