Tmux

如何在新的 tmux 會話中執行程式碼 - 從目前會話中?

  • April 17, 2020

我使用 Ubuntu 16.04,我需要以下tmux解決方案,因為我想執行一個超時程序,sleep因為在我的特殊情況下,我不滿意at並遇到了一個錯誤nohup(組合時nohup-sleep)。現在,tmux它似乎是最好的選擇,因為它有自己的無掛斷機制,並且在手動使用中實際上工作正常(我只問關於自動化我已經可以手動完成的過程的問題)。

我需要的:

我需要一種方法來執行以下 3 個操作,全部在一個操作中完成:

  1. 附加一個新tmux會話。
  2. 向該會話注入一組現成的命令,例如(sleep 30m ; rm -rf dir_name ; exit). 我特別喜歡多行集合,而不是一長行。
  3. 執行上述命令將完成的時刻設置為新tmux會話中的標準輸入。

換句話說,我想在另一個tmux專門為此創建的會話中執行程式碼集,但要在一個操作中完成所有操作。


筆記:

  • 我的目標是從我最初的工作會議(我大部分時間工作的會議)中完成所有工作。一般來說,我無意訪問新創建的會話,我只想用它自動執行的程式碼來創建它,僅此而已。
  • 如果可能的話,我更喜歡heredoc解決方案。我認為這是最有效的。

如果您將要執行的程式碼放在 eg 中/opt/my_script.sh,則很容易做您想做的事情:

tmux new-session -d -s "myTempSession" /opt/my_script.sh

這將啟動一個名為“myTempSession”的新分離會話,執行您的腳本。您可以稍後通過執行附加到它以檢查它在做什麼tmux attach-session -t myTempSession

在我看來,這是最直接、最優雅的解決方案。我不知道使用 tmux 從標準輸入(讀取“來自 heredocs”)執行命令的任何簡單方法。通過到處亂砍你甚至可以做到,但它仍然是(並且看起來像)一個黑客。

例如,這裡有一個 hack,它使用我上面建議的命令來模擬你想要的行為(= 在一個新的 tmux 會話中從 heredoc 執行程式碼。在創建臨時文件時,伺服器的硬碟上不會發生寫入/dev/shm,即一個tmpfs):

(
 cat >/dev/shm/my_script.sh &&
 chmod +x /dev/shm/my_script.sh &&
 tmux new-session -d '/dev/shm/my_script.sh; rm /dev/shm/my_script.sh'
) <<'EOF'
   echo "hacky, but works"
EOF

引用自:https://unix.stackexchange.com/questions/335087