以程式設計方式在分割畫面中執行後台任務?

以程式設計方式在分割畫面中執行後台任務?

我試圖弄清楚如何建立一個名為 的命令runbg,該命令將接受在後台運行的子命令並為每個子命令建立一個分割畫面。當子命令成功完成時,分割畫面關閉;如果子命令失敗,則螢幕將保持開啟並顯示錯誤,直到使用者使用終止訊號關閉螢幕。一旦所有螢幕關閉,命令就完成並繼續執行。例如

runbg "ping -t 5 google.com" "ping -t 10 microsoft.com"
echo "done"

我發現我可以做到:

ping -t 5 google.com &
ping -t 10 microsoft.com &
wait

這實現了事物的並行方面,但是每個命令都將所有內容輸出到同一個終端,這非常嘈雜。因此需要分割畫面設定。

透過搜尋這裡,我發現GNU 螢幕這似乎可以處理螢幕方面的事情,但似乎它需要一個 .screenrc 檔案 - 雖然可以透過程式設計完成,但有點煩人,正如我想像的那樣,這意味著我需要在某個地方編寫一個隨機 tmp 檔案。

我發現這個答案沒有使用螢幕,.sreenrc但是我不知道如何在其中進行分割畫面操作。

簡而言之:

  • 有沒有什麼東西已經可以實現我想要的功能runbg
  • 如果不是,GNU Screen 是我想要的嗎?我是否需要使用.screenrc文件,或者有沒有一種方法可以在沒有文件的情況下完成分割畫面?

答案1

您可以透過將 split-window 和 send-key 串在一起來使用 tmux 來完成此操作,如下所示:

tmux new session \; split-window -v \; send-keys 'ping -t 5 google.com' C-m \; split-window -h \; send-keys 'ping -t 10 microsoft.com' C-m \;

相關內容