題 設置使用sudo調用的crontab -e的默認編輯器


我在Debian Squeeze上使用Bash。我剛讀過這個話題: 將crontab的默認文本編輯器更改為vim 

我已導出兩個變量 VISUAL 和 EDITOR 為普通用戶和root用戶提供vim。這很有效 - 當我輸入時 crontab -e 作為普通用戶或root用戶,crontab運行vim進行編輯。

但跑步 sudo crontab -e 打開納米。

運行 sudo echo $EDITOR (要么 $VISUAL)給了 vim int輸出。


3
2017-12-23 11:58


起源


你會找到原因的解釋 sudo echo $EDITOR 不會做你認為它做的事情 這裡 (以及嘗試使您的crontab工作的事情) - Mat
@mat:您的評論可能是一個常規答案。 - Heptite
@mat:謝謝你的回答。 - Coolmax
你是root用戶時運行'update-alternatives --config editor'嗎? - tumiki
@tumiki:我剛剛檢查過,這是有效的,但我也在尋找其他(非debian)發行版的解決方案。 - Coolmax


答案:


默認情況下出於安全考慮, sudo 不保留用戶環境。

有多種方法可以解決這個問題;對於您的具體情況,我建議添加 VISUAL=/usr/bin/vim (和 EDITOR=/usr/bin/vim 對於使用錯誤的程序) /etc/environment

第二種選擇,如果你有一個寬鬆的sudo配置(可能是因為它只是你,或者所有的sudoers都有真正的root訪問權限)是運行 visudo 並添加 Defaults env_keep="VISUAL EDITOR" 允許所有sudoers指定自己的(即保留該環境變量)。

您現有的sudoers文件可能已經包含(或包含)一個或多個env_keep語句,例如:這(來自pastebin示例):

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

第一個 env_keep 行將覆蓋您在其上方所做的任何編輯(賦值),其他行將擴展列表(+=)。為了讓一切按照您習慣的方式運行,除非您有理由更改設置,否則我建議您立即添加一行  那些:

Defaults    env_keep += "VISUAL EDITOR"

(還有其他選擇可以使用您喜歡的編輯器,但它們要么不必要地複雜或者過於寬鬆和危險,所以你必須閱讀 man sudoers,自己弄明白,並了解相關問題可能是什麼。)


5
2018-05-02 16:25



喜歡這個...除了visudo會發起vi ...我們試圖像瘟疫一樣避免的事情。 sudo env EDITOR = nano visudo是要走的路。或者貓,這有點危險。也, Defaults env_keep="VISUAL EDITOR" 只有在env重置後才能工作,所以把它放在頂部是行不通的...底部是最安全的。 - Ray Foss
我很困惑為什麼在env_reset下放置env_keep =“VISUAL EDITOR”不起作用...我只是嘗試在頂部,在env_reset下面和底部。只在底部工作。 - Ray Foss
在沒有任何其他信息的情況下,我只是猜測文件中已經存在一個行設置env_keep,它會覆蓋您在上面放置的內容以及通過將指令移動到最後來覆蓋的內容。如果您將sudoers文件粘貼到pastebin.com或其他東西並在此處添加鏈接,我可以將相關信息提取到答案中。 - Gabe
它是默認的centos sudoers,給我帶來麻煩。我應該編寫腳本。 pastebin.com/4s3CiVYJ - Ray Foss