linux
, tmux
, script
, bash
tmux 的全稱是 Terminal Multiplexer,直譯過來就是終端(Terminal)多工器(Multiplexer),這個工具可以在單一 screen 之下 create, attach, detach 多個終端,熟悉之後十分好用。
只是和 vim,vi 系列相同,所有操作皆能且只能使用鍵盤,不像 GNOME Terminal 一樣有直觀的 GUI 介面,算不上友善的學習曲線使人又愛又恨。
關於 tmux 的基本概念和入門組合鍵,G. T. Wang 的文章提供了很不錯的繁體中文資料,本篇的重點在於如何配合 shell script 和 tmux 來快速建立一個順手的工作區。
you can do this
keyword: tmux
,script
首先,當然是創建一份腳本,第一行請記得加上 shebang。
這行會告知系統,接下來的部分是一份 bash script。
接下來就可以開始建立一個新的 session,為了往後修改上的便利,可以使用一個變數來記錄 session 的名稱。
其中-d
代表 detach,-s
後面接 session 的名稱。
因為使用了-d
,此時結果並不會顯示在螢幕上,有興趣的話可以使用
來進入 tmux 檢查結果,之後再按 ctrl + b -> d 就可以再次 detach 回到原終端了。
建立名為 S_NAME 的 session
剛建立的 session 會包含一個 window,同樣地我們也可以對該 window 命名以提高辨識度。
-t
後需要提供目標 session 和 window,由於 session 是剛建立起來的,裡面唯一一個 window 的編號必為 0。最後的是新的命名Main
。
同樣地,有興趣檢查結果可以使用
來進入 tmux 查看,然後使用 ctrl + b -> d 再次 detach 回到原終端。往後不再贅述。
重命名 window 為 Main
當然只創建 window 的話意義是不大的,tmux 也提供傳送鍵盤指令的功能,可以用於移動工作目錄,自動執行預設指令,啟動其他腳本等等。
例如:
則是等同輸入ping 8.8.8.8
, 再按Enter
。同樣地-t
後接上目標 session 和 window。
自動執行 ping 指令
在創建新的 window 前,我們可以先從當前 window 中分割出 pane。
其中-h
代表水平 (horizontal),-v
代表垂直 (vertical)。
-p
後面接比例,例如-p 30
就代表分割得到的新 pane 佔 30% 空間。垂直分割時新的是下方的 pane,水平分割時新的是右方的 pane。
-t
則始終如一,用於指定 session 和 window。
pane 分割示例
在分割的同時,當前的工作 pane 就會移到新的 pane 上,因此在執行水平分割之後,
當前 pane 就變更為右方(上)的 pane 了。這時候再執行垂直分割,
就會得到右下的 pane。
那如果有需要對同一個 pane 進行多次的切割呢?或者有工作需要再回到之前的 pane 執行呢?一般使用 tmux 時可以用 ctrl + b -> 方向鍵來選取 pane,使用命令也是同樣的道理。
其中-L
代表往左,而上下左右則分別是-U
,-D
,L
,R
。
而-t
依然是指定 session 和 window。
還記得之前啟動的ping
指令嗎,現在來把他停下來吧。在上一條指令選取了左方 pane 後,我們可以再接上以下的指令
這等於按下crtl^c
,鍵入clear
,再按Enter
選取左方 pane 並清空其畫面
單一 window 環境暫時告一段落,接下來就創建新的 window 吧。
注意: 這邊的-t
指定的是 session 和新的 window 編號。
-n
用於指定新的 window 名稱。和創建 pane 時同樣,需要注意當前的工作 window 也會切換到新的 window 上。
至於為甚麼要把新的 window 命名為 starwar?因為 terminal 可以用來播放 starwar 啊!
連線到以上的 server,terminal 就會自動播放 star war 了,神奇吧!
建立新的 window 並開始播放 star war
和 pane 一樣,一般使用 tmux 時可以透過 ctrl + b -> n 來選取下一個 window,使用命令也可以達到同樣的目的。
-t
用於指定 session,next
代表下一個 window,prev
則是前一個 window。
回到上一個 window
如果需要直接指定一個特定 window 的話,也可以使用 select-window
同樣是在-t
後指定 session 和 window。
做完了想做的設定後就可以 attach 回去看結果啦,跟一直在用的一樣,直接
或者在腳本內的話
也可以。
想要指定 attach 回去的 window 的話也可以指定 window 名稱或編號,反正我們每個 windows 都有好好地命名,那就當然是指定名稱比較好識別啦。
attach 回到 star war 播放頁
以下就是建立一開始的範例圖的 tmux 的腳本(trust me, its simple)。
甚麼?你用了rename-window
可是 tmux 根本沒反應?或者操作一下又自動回到預設的命名?那你來對地方了。
首先在家目錄創建一個設定檔(設定檔不存在的話就直接建新的)
在最後一行加上
然後讓 tmux 重新讀取一下
搞定~
來源:神奇的 stackoverflow ,感謝 Mohammad Rajabloo。
明明是寫split-window -p 50
,結果分割出來只剩個 20% 的空間?可能是 tmux 在 attach 的時候接到了新的視窗大小喔。
在創建新 session 時就先提供好終端資訊吧!
來源:stack…exchange,感謝 Kamil Maciorowski。