[閒聊] 如何尊重 $EDITIR $VISUAL alternatives?

看板Linux作者 (cuello)時間2年前 (2022/09/18 21:44), 2年前編輯推噓7(7020)
留言27則, 6人參與, 2年前最新討論串1/1
Hi, 最近有次閒逛, 逛到了 /etc/alternatives/ 看到裡面有個 editor -> /bin/nano 就馬上想起了前好一陣子, 當我在 # vim /etc/systemd/system/systemd-udevd.service.d/override.conf 板上有人提醒我, 應該 # systemctl edit systemd-udevd 只是, systemd 好像無意尊重我選擇的 editor 因為我的 $EDITOR 跟 $VISUAL 都設為 vim 而且, crontab -e 很配合我的選擇. 但是, systemctl 卻堅持要叫用 nano(1) 我試過把 EDITOR 改為 nono, crontab -e 就也叫的 nano(1). 這很好啊~ 不是嗎? 但是 systemd 就偏偏不配合... 當時, 板上也似乎沒有人想到是甚麼原因它一定要 nano... 最近碰巧撞到了 /etc/alternatives/editor 就隨手 # ln -sf /bin/vim /etc/alternatives/editor 果然, systemctl(1) 就注意到了我要的是 vim... 看起來, 這似乎是近代 Linux 的另外一個「選擇途逕」 把它們全部集中在 /etc/alternatives 來管理 想, 其實也是個不錯的辦法... 可是, 你知道我的問題: Given 我的 1. EDITOR=vim 2. VISUAL=vim 3. /etc/alternatives/editor -> /bin/nano 那麼, 當一個 developer 需要叫用 editor 而系統環境卻各有不同意見, 他該怎麼做才好? (P.S. 我跑的是 Debian buster) regards -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.172.27.91 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Linux/M.1663508649.A.82B.html

09/18 22:08, 2年前 , 1F
update-alternatives
09/18 22:08, 1F

09/18 22:13, 2年前 , 2F
寫一個腳本檢查 EDITOR 環境變數給 editor
09/18 22:13, 2F

09/18 22:15, 2年前 , 3F
此外,systemd edit 用的環境變數是 SYSTEMD_EDITOR
09/18 22:15, 3F

09/18 22:55, 2年前 , 4F
並沒有,這是Debian系的手段好嗎
09/18 22:55, 4F
差點忘了問, 請問大家, 是只有 Debian 才有 /etc/alternatives/ 嗎?

09/18 23:31, 2年前 , 5F
剛剛查一下 RHEL 最近也出了類似的東西
09/18 23:31, 5F

09/19 00:05, 2年前 , 6F
sudo EDITOR=vim systemctl edit servicename.service
09/19 00:05, 6F

09/19 00:06, 2年前 , 7F
剛試一下這樣可以吃到 EDITOR 啊 (CentOS Stream 8)
09/19 00:06, 7F
我的 debian buster 也跟你一樣 $ sudo ln -sf /bin/nano /etc/alternatives/editor 恢復原狀 $ sudo EDITOR=vim systemctl edit systemd-udevd 是叫 vim(1) --- [1] $ sudo systemctl edit systemd-udevd 是叫 nano(1) -------------- [2] $ sudo echo $EDITOR 是 vim 好! 那,我一定漏掉了甚麼重要的東西沒弄懂..... 請拯救我於水深火熱~ systemctl(1) 接受 [1] 的 EDITOR=vim systemctl(1) 不認識, 或不接受 [2] bash 已經 export 的 EDITOR=vim 而同時, 如前述, crontab(1) 有 ack 我 export 的 EDITOR=vim p.s. 換句話說, 假設我用 C 寫了一個程式, 放在 systemctl 的位置 我會有機會在程式裡面「得知」"我" 是 invoked by [1] 還是 [2] 嗎?

09/19 00:20, 2年前 , 8F
樓上是對的 SYSTEMD_EDITOR 接下來是EDITOR
09/19 00:20, 8F

09/19 00:20, 2年前 , 9F
man systemctl edit
09/19 00:20, 9F
根據裝在我這裡的 manpage. $SYSTEMD_EDITOR Editor to use when editing units; overrides $EDITOR and $VISUAL. If neither $SYSTEMD_EDITOR nor $EDITOR nor $VISUAL are present or if it is set to an empty string or if their execution failed, systemctl will try to execute well known editors in this order: editor(1), nano(1), vim(1), vi(1). 我我對上一段的理解是, systemctl(1) 有意要尊重我的 $EDITOR 跟 $VISUAL 儘管我想不出 $SYSTEMD_EDITOR 存在的必要性跟正當性 (剛檢查過, 我也沒設) 我也尊重 systemctl 作者個人所偏好的 precedence (editor-nano-vim-vi) 但是, 現在, 似乎, systemctl(1) 的行為跟這一段告訴我的不太一致... ※ 編輯: cuello (218.172.27.91 臺灣), 09/19/2022 17:07:47 ※ 編輯: cuello (218.172.27.91 臺灣), 09/19/2022 18:09:52

09/19 21:48, 2年前 , 10F
你可以想想看下面這幾個的差別
09/19 21:48, 10F

09/19 21:48, 2年前 , 11F
sudo echo $EDITOR
09/19 21:48, 11F

09/19 21:48, 2年前 , 12F
sudo bash -c 'echo $EDITOR'
09/19 21:48, 12F

09/19 21:48, 2年前 , 13F
sudo EDITOR=vim bash -c 'echo $EDITOR'
09/19 21:48, 13F

09/20 00:14, 2年前 , 14F
sudo 預設會重設環境變數,除非你開 sudo -E 或在設定檔
09/20 00:14, 14F

09/20 00:15, 2年前 , 15F
裡特別設定不要重設,不然大多數環境變數都不會經由 sudo
09/20 00:15, 15F

09/20 00:15, 2年前 , 16F
往下傳。另外 sudo echo "$EDITOR" 這個變數在你的 shell
09/20 00:15, 16F

09/20 00:16, 2年前 , 17F
就已經展開了,實際傳給 sudo 的就是 echo vim,無法用來
09/20 00:16, 17F

09/20 00:17, 2年前 , 18F
確認 sudo 執行程式用的環境變數。
09/20 00:17, 18F

09/20 00:21, 2年前 , 19F
另外 /etc/alternatives 不是設計來手動修改的,它有設定
09/20 00:21, 19F

09/20 00:21, 2年前 , 20F
檔,要改應該要用 update-alternatives 指令改。
09/20 00:21, 20F

09/20 03:26, 2年前 , 21F
4F為什麼你不更新了?
09/20 03:26, 21F
以上, 大家所看到的, 真的是一堆人耐心拯救一個執迷不悟的啊~ 而且除了仔細看一堆 "s..t" 而且還要花時間打子字 請接受讚美吧! 我來列出自己認為的罪狀 A. 我抱怨 manpage 所寫的跟程式行為不一! 其實正是我自己! --------------------------------------- 因為我文裡雖然到處寫的是: # systemctl edit systemd-udevd 看起來, 我並沒有真的這麼做,而且一次也沒有! 私底下真的做的是: $ sudo systemctl edit systemd-udevd 然後,自己一廂情願地畫上等號。然後, 別人也看不見你在搞啥~ 像這種錯誤,其實遠比表面上看起來要嚴重的多! B. 我從來沒有嚴肅對待過 sudo(8)! ---------------------------------------- 我跟 sudo(8) 從一開始,所維持的關係是曖眛不明, 得過且過的。本來給自己的理由是: 現在沒空,先做更急迫的吧... 其實反而要浪費更多資源。 雖然,用 sudo(8) 時,一直隱約感覺少了甚麼..... 但是,就一直是繞道來避免眼前的「尷尬」... 真是,「彎道超渡」啊~ 這種態度,常遠來看,並沒有省到一點時間!剛好相反! C. 我隱約對 nano 有偏見,其實預設 nano 是合理的 ------------------------------------------------ 預設為大多數人的選擇當然是最理性,最節能的做法。 D. 看到又多出了個甚麼 $SYSTEMD_EDITOR 而心生不滿。 ------------------------------------------------- 沒必要!結果是,它並沒有干擾到我。可能是為了一個我 短期內還看不到的緣故吧。 E. 還有甚麼呢? ... 喔,我終於做了 $ sudo update-alternatives --config editor There are 4 choices for the alternative editor (providing /usr/bin/editor). Selection Path Priority Status ------------------------------------------------------ * 0 /bin/nano 40 auto mode 1 /bin/ed -100 manual mode 2 /bin/nano 40 manual mode 3 /usr/bin/vim.basic 30 manual mode 4 /usr/bin/vim.tiny 15 manual mode Press <enter> to keep the current choice[*], or type selection number: 3 不適合自己這樣做 $ sudo ln -sf /bin/vim /etc/alternatives/editor 這樣不完整,例如 man editor 就沒改到.... 不過看起來,我還是有做對一件事, 那就是臨時決定跑上來「閒聊」 其實是「靠杯」~ ※ 編輯: cuello (218.172.27.91 臺灣), 09/20/2022 10:04:41

09/21 19:15, 2年前 , 22F
我也是覺得一直鑽 editor 要怎麼設定很煩, 所以就找一
09/21 19:15, 22F

09/21 19:15, 2年前 , 23F
個成功率看起來最高的方法,就無腦用下去了
09/21 19:15, 23F

09/21 21:04, 2年前 , 24F
SYSTEMD_EDITOR 存在的目的,應該是讓你可以在不同的程式
09/21 21:04, 24F

09/21 21:05, 2年前 , 25F
用不同的編輯器。前面的 SYSTEMD 就像是 namespace 的功
09/21 21:05, 25F

09/21 21:06, 2年前 , 26F
能,讓不同程式的設定不會互相干擾。就像是 git 也有
09/21 21:06, 26F

09/21 21:06, 2年前 , 27F
GIT_EDITOR,psql 也有 PSQL_EDITOR 一樣。
09/21 21:06, 27F
文章代碼(AID): #1Z9o2fWh (Linux)
文章代碼(AID): #1Z9o2fWh (Linux)