
我通常會用來tmux
啟動一個將運行一段時間的任務。我會定期返回並使用它進行檢查tmux -a
,如果仍未完成則斷開連接並稍後再次檢查。
有沒有辦法只查看會話中發生的情況的簡短快照而不完全附加?我正在尋找類似理論上tail
在會話上執行 a 以獲得最後一點輸出的東西(但如果我可以避免使用輸出的副本創建另一個文件就更好了)
也許連接並立即將其分開也可以。我正在嘗試保存擊鍵,也許這樣的命令可以遠端執行,
即ssh root@server tmux --tail
?
答案1
我認為capture-pane
可能適合您的需求:
tmux capture-pane -pt "$target-pane"
(有關指定窗格的方法,請參閱手冊頁中的「target-pane」)
預設情況下,該命令將轉儲指定窗格的目前內容。您可以使用-S
和選項(起始行號和結束行號)指定行範圍-E
:第一行是 0,負數指的是窗格「向後捲動」歷史記錄中的行。因此,新增-S -10
可以取得最近的十行歷史記錄以及窗格的目前內容。
tmux capture-pane -pt "$target-pane" -S -10
該-p
選項是在 1.8 中新增的。如果您運行的是早期版本,那麼您可以這樣做:
tmux capture-pane -t "$target_pane" \; save-buffer - \; delete-buffer
但是,如果您透過以下方式發出此命令,請注意這些分號,ssh
因為遠端 shell 將添加額外層級的 shell 解釋(分號需要作為參數傳遞給最終的命令)多路復用器命令,它們不得由本地或遠端 shell 解釋)。
答案2
並不真地。我想到的一種方法是啟動長時間運行的進程 ( ),然後定期運行相關會話$lrp
,無需重新連線。list-windows
在某些時候,帶有 $lrp 的 tmux 視窗的名稱將更改回預設值,通常是您的 shell,並且您將能夠看到 $lrp 已完成。
┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1 (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: $lrp* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)
┌─[Veles ~]
└─╼ tmux list-windows -t 0
0: App1 (1 panes) [142x51] [layout b27d,142x51,0,0,0] @0
1: SSH (1 panes) [142x51] [layout b27e,142x51,0,0,1] @1
2: IRC (1 panes) [142x51] [layout b27f,142x51,0,0,2] @2
3: Shell- (1 panes) [142x51] [layout b280,142x51,0,0,3] @3
4: bash* (1 panes) [142x51] [layout b281,142x51,0,0,4] @4 (active)