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 -V
root(つまり、sudo sudo -V
sudo権限を持つユーザー)として実行してsudo設定を表示できます。
Ubuntuでは、小さなリストを除いて変数が削除され、EDITOR
メンテナンスVISUAL
リストにはありません。したがって、を実行すると、sudo somecommand
ユーザー固有のエディタのデフォルト設定は実行時に適用されませんsomecommand
。
を実行するとsudo -E
ファイルが一時的な場所にコピーされ、sudoは他の権限なしでエディタを実行し、最後にエディタが成功ステータスを返すと一時ファイルは最終的な場所に移動されます。追加の権限なしでエディタが実行されるため、sudoは環境を削除しません。
可能であれば、この機能を使用する必要がありますsudo -E
。これにより、高い権限でプログラムを実行することを心配することなく、お気に入りのエディタを実行できます。これが不可能な場合(実行など)、crontab -e
sudoで実行されるコマンドでデフォルト設定を再定義してエディタを選択できます。
sudo env VISUAL=vim crontab -e