sudo에서 실행할 때 편집기 선택

sudo에서 실행할 때 편집기 선택

Ubuntu 12.04 시스템에서는 대체 시스템을 사용하여 설정했습니다.편집하다도착하다vim 기본 버전. 루트일 때는 올바른 편집기를 얻지만 루트로 sudo하고 crontab을 실행할 때는 그렇지 않으며 그 이유를 이해하려고 노력하고 있습니다.

좀 더 자세히. 다른 옵션편집하다현재 다음으로 설정됨vim 기본 버전수동 모드를 통해(출력 조정):

% sudo update-alternatives --set editor /usr/bin/vim.basic
% update-alternatives --display editor
editor - manual mode
  link currently points to /usr/bin/vim.basic
/bin/nano - priority 40
  slave editor.1.gz: /usr/share/man/man1/nano.1.gz
/usr/bin/vim.basic - priority 30
  slave editor.1.gz: /usr/share/man/man1/vim.1.gz
  slave editor.fr.1.gz: /usr/share/man/fr/man1/vim.1.gz
  slave editor.it.1.gz: /usr/share/man/it/man1/vim.1.gz
  slave editor.pl.1.gz: /usr/share/man/pl/man1/vim.1.gz
  slave editor.ru.1.gz: /usr/share/man/ru/man1/vim.1.gz
Current 'best' version is '/bin/nano'.

루트로 sudo하고 crontab을 편집하면 편집기는 vim.basic입니다.

% sudo -i
% crontab -e
# editor is vim; :help shows
# *help.txt*      For Vim version 7.3.  Last change: 2010 Jul 20

EDITOR 및 SHELL을 루트로 사용:

# env | grep -i editor
EDITOR=vim
# echo $0
-bash

그러나 일반 사용자로서 sudo crontab을 실행하면 편집기는 nano입니다.

% sudo crontab -e
# GNU nano 2.2.6

일반 사용자로서 EDITOR 및 SHELL:

% env | grep -i editor
EDITOR=vim
% echo $0
zsh

이제 난 알아차렸어나노미터(40)보다 우선순위가 높습니다.vim 기본 버전(30) vim.basic의 우선순위를 변경할 수 있습니다. 하지만 이는 목적에 어긋난다수동 모드.

고쳐 쓰다

나는 사용하여 알아 차렸다Sudo-E올바른 편집기가 제공됩니다. 이는 문제가 환경과 관련되어 있음을 의미합니다. 그건:

sudo crontab -e     # nano editor is used
sudo -E crontab -e  # vim editor is used

답변1

대부분의 구성에서 sudo는 대부분의 환경 변수를 제거합니다. sudo -V루트(즉, sudo sudo -Vsudo 권한이 있는 사용자) 로 실행하여 sudo 구성을 볼 수 있습니다 .

우분투에서는 작은 목록을 제외하고 변수가 제거되며 및 EDITOR유지 VISUAL목록에 없습니다. 따라서 를 실행하면 sudo somecommand사용자별 편집기 기본 설정이 런타임에 적용되지 않습니다 somecommand.

를 실행하면 sudo -E파일이 임시 위치로 복사되고, sudo는 다른 권한 없이 편집기를 실행하고, 마지막으로 편집기가 성공 상태를 반환하면 임시 파일이 최종 위치로 이동됩니다. 추가 권한 없이 편집기가 실행되므로 sudo는 환경을 제거하지 않습니다.

가능하면 이 기능을 사용해야 합니다 sudo -E. 이렇게 하면 높은 권한으로 프로그램을 실행하는 것에 대해 걱정할 필요 없이 즐겨 사용하는 편집기를 실행할 수 있습니다. 이것이 가능하지 않은 경우(예: 실행) crontab -esudo로 실행되는 명령에서 기본 설정을 다시 정의하여 편집기를 선택할 수 있습니다.

sudo env VISUAL=vim crontab -e

관련 정보