sudoで実行するときのエディタの選択

sudoで実行するときのエディタの選択

Ubuntu 12.04システムでは、代替システムを使用して設定しました。編集する到着vim 基本バージョン。 rootの場合は正しいエディタを取得しますが、rootとして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'.

rootで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をrootとして使用する:

# 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 -Vroot(つまり、sudo sudo -Vsudo権限を持つユーザー)として実行してsudo設定を表示できます。

Ubuntuでは、小さなリストを除いて変数が削除され、EDITORメンテナンスVISUALリストにはありません。したがって、を実行すると、sudo somecommandユーザー固有のエディタのデフォルト設定は実行時に適用されませんsomecommand

を実行するとsudo -Eファイルが一時的な場所にコピーされ、sudoは他の権限なしでエディタを実行し、最後にエディタが成功ステータスを返すと一時ファイルは最終的な場所に移動されます。追加の権限なしでエディタが実行されるため、sudoは環境を削除しません。

可能であれば、この機能を使用する必要がありますsudo -E。これにより、高い権限でプログラムを実行することを心配することなく、お気に入りのエディタを実行できます。これが不可能な場合(実行など)、crontab -esudoで実行されるコマンドでデフォルト設定を再定義してエディタを選択できます。

sudo env VISUAL=vim crontab -e

関連情報