Tmux
如何在新的 tmux 會話中執行程式碼 - 從目前會話中?
我使用 Ubuntu 16.04,我需要以下
tmux
解決方案,因為我想執行一個超時程序,sleep
因為在我的特殊情況下,我不滿意at
並遇到了一個錯誤nohup
(組合時nohup-sleep
)。現在,tmux
它似乎是最好的選擇,因為它有自己的無掛斷機制,並且在手動使用中實際上工作正常(我只問關於自動化我已經可以手動完成的過程的問題)。我需要的:
我需要一種方法來執行以下 3 個操作,全部在一個操作中完成:
- 附加一個新
tmux
會話。- 向該會話注入一組現成的命令,例如
(sleep 30m ; rm -rf dir_name ; exit)
. 我特別喜歡多行集合,而不是一長行。- 執行上述命令將完成的時刻設置為新
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