簡體   English   中英

使用 Windows VSCode 編輯 Ubuntu Crontab 的 WSL2 實例

[英]Editing WSL2 instance of Ubuntu Crontab using Windows VSCode

我的問題是是否可以使用通過 WSL 遠程 SSH 連接的 Windows VSCode 編輯基於 WSL2 的 Ubuntu 實例的 crontab。

如果我在我的 WSL 實例中鍵入 export EDITOR=code然后鍵入crontab -e ,我能夠在我的 VSCode 實例中看到一個/tmp/crontab.sygFAU文件加載。

問題是,一旦我對該文件進行編輯,它會將文件保存到/tmp/crontab.sysFAU但實際上並沒有采取下一步替換/var/spool/cron/crontabs中的真實 crontab 文件.

因此,一旦我重新打開 crontab,它只會顯示我之前的內容,而不是我保存的編輯。

很高興知道這是否不可能,或者是否有任何替代方法來運行 GUI 編輯器,因為使用 nano 很痛苦!

我自己以前沒有考慮過的一個有趣的問題。 這是正在發生的事情:

  • 您將編輯器設置為code

  • crontab -e ,它使用臨時 crontab 正確加載 VSCode。

  • 但是,因為這是一個 Windows GUI 應用程序,它會在啟動 VSCode 后立即將控制權返回給父 Linux 應用程序 ( crontab )。 如果您只是從 WSL 中的 shell 啟動notepad.exe ,您會看到相同的結果——記事本啟動(而不是退出)后,控制權將返回到 shell。

  • 如果此時切換回終端,您會看到crontab檢測到它啟動的編輯器已退出(返回),因此它已經嘗試將臨時文件復制到永久位置。

  • 但是,由於臨時文件還沒有任何更改, crontab決定無事可做。

  • 在 VSCode 中編輯文件並保存它沒有任何效果,除了留下一個懸空的/tmp/...文件(因為crontab不在那里清理)。

那么解決方案是什么? 我們需要一種方法來啟動 Windows GUI 應用程序並防止它在您完成編輯之前將控制權返回給crontab

我最初認為這個問題可能有用,但問題是啟動 Windows 進程的實際命令嵌入在 shell 腳本中,你可以用less "$(which code)" (或code "$(which code)" ), 但編輯它可能不是一個好主意。

因此,我想出的下一個最好的辦法是圍繞(已經是包裝器) code命令的一個簡單的“包裝器”腳本。 創建~/.local/bin/code_no_fork.sh (可以在任何地方):

#!/usr/bin/env bash
code $* > /dev/null
echo Press Spacebar to continue
read -r -s -d ' '

學分:空格鍵方法的這個答案

然后:

EDITOR=~/.local/bin/code_no_fork crontab -e

在 VSCode 中進行編輯后,只需按空格鍵允許腳本繼續/退出,此時crontab將(假設未檢測到錯誤)安裝新的 Crontab。

備擇方案

通常應該只是 Windows GUI 應用程序的問題,因此另一個可能的途徑是簡單地使用任何不會分叉的Linux編輯器。 如果您想要一個 GUI 編輯器,只要您運行的是包含 WSLg 支持的 WSL 版本(現在可用於 Windows 10 和 11),那是完全可能的。

我不會提供任何個人編輯建議,因為這會進入“意見”和“軟件推薦”領域,這在這里是題外話。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM