visudo 편집기에 emacs를 사용하면 Mac에서 /etc/sudoers 파일이 열리지 않습니다.

visudo 편집기에 emacs를 사용하면 Mac에서 /etc/sudoers 파일이 열리지 않습니다.

Mac에서 파일을 emacs편집하는 데 사용하고 싶지만 평생 동안 그렇게 할 수는 없습니다. 파일에서 다음 구성 설정을 모두 시도했지만 아무 소용이 없습니다.sudoersvisudosudoers

  • Defaults editor = "/usr/bin/emacs"emacs인트로 화면을 보여줍니다
  • Defaults editor = "/usr/bin/emacs visudo""visudo"라는 새 파일을 생성합니다.
  • Defaults editor = "/usr/bin/emacs sudoers"sudoers 파일을 열지만 읽기 전용 버퍼로 사용합니다.
  • EDITOR="/usr/bin/emacs"셸에서 실행 (또는 export내 파일에 저장 ~/.bash_profile)한 다음 다음을 실행하면 visudo소개 화면이 Defaults env_keep+="EDITOR"표시됩니다.emacs
  • Defaults editor = "emacs"editor변수는 다음으로 시작해야 한다고 말합니다 ./
  • Defaults editor = /usr/bin/emacs인트로 화면을 보여줍니다
  • Defaults editor = "/usr/bin/emacs -u matt"인트로 화면을 보여줍니다

기본적으로 내가하는 일은 아무것도 작동하지 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

저는 macOS High Sierra(10.13)를 실행하고 있습니다.

답변1

문제는 다음과 같이 visudo실행된다는 것입니다 . Emacs는 '--'를 '인수 끝'으로 해석하지 않고 그 뒤의 모든 내용을 다른 편집기처럼 파일 이름으로 해석하지 않지만 대신 소개 화면을 표시합니다. 내가 아는 가장 쉬운 방법은 래퍼입니다.emacs/usr/bin/emacs -- /etc/sudoers.tmp

bash-3.2$ sudo cat > /usr/bin/emacs-visudo-wrapper.sh << 'EOF'
#!/bin/sh
set -eu
ARGS=()
for var in "$@"; do
   [ "$var" != '--' ] && ARGS+=("$var")
done
exec /usr/bin/emacs "${ARGS[@]}"
EOF
bash-3.2$ sudo chown root:wheel /usr/bin/emacs-visudo-wrapper.sh
bash-3.2$ sudo chmod 755 /usr/bin/emacs-visudo-wrapper.sh
bash-3.2$ sudo cat >> /etc/sudoers << 'EOF'
Defaults    editor = "/usr/bin/emacs-visudo-wrapper.sh"
EOF

관련 정보