第3章 腳本定制 tmux 環(huán)境

2018-02-24 15:48 更新

第 3 章 腳本定制 tmux 環(huán)境

在項目上工作時,你可能需要運行一大堆的工具和程序集。如果你在做一個 web 應(yīng)用,你可能需要一個命令窗口,一個文本編輯器,一個數(shù)據(jù)庫命令窗口,和一個運行著你的自動化測試套件的窗口。這樣就有大一堆的窗口需要管理,一大堆的命令需要輸入。

想象一下你來到了你的工作站前剛坐下,準(zhǔn)備開始為你的項目添加新的特性,然后只需要一個簡單的命令就可以把這些程序運行起來,每個程序都運行在一個的 tmux 會話中,擁有它自己的面板或是窗口。我們可以使用 tmux 的客戶端-服務(wù)器模型(client-server model)來創(chuàng)建一個定制的腳本來自動地構(gòu)建開發(fā)環(huán)境、分割窗口并運行程序。我們接下來會先學(xué)習(xí)如何手動執(zhí)行,然后深入學(xué)習(xí)高級的自動化工具。

3.1 使用 tmux 命令創(chuàng)建一個自定義安裝

我們已經(jīng)學(xué)習(xí)了如何使用 tmux 命令來創(chuàng)建新的 tmux 會話,但是 tmux 命令還有很多其它的參數(shù)可以使用。例如選擇一個運行中的會話然后把它的窗口分割成面板,改變布局,甚至是在會話內(nèi)運行程序。

關(guān)鍵參數(shù)是 -t,也就是 target。當(dāng)我們有一個已命名的 tmux 會話,可以像這樣連接到它:

$ tmux attach -t [session_name]

我們使用這個 target 參數(shù)來引導(dǎo)命令指向正確的 tmux 會話。所以,如果我們創(chuàng)建了一個新的名為 development 的 tmux 會話,像這樣:

$ tmux new-session -s development

然后我們使用 PREFIX d 從這個會話分離出來,那么可以使用這個命令讓這個會話水平分割窗口:

$ tmux split-window -h -t development

執(zhí)行完命令后,如果再連接到這個會話,我們就會發(fā)現(xiàn)窗口已經(jīng)分割成了兩個面板。命令:

$ tmux attach -t development

實際上,并不需要從 tmux 會話里分離出來再發(fā)送命令。可以另開一個終端然后把窗口再次分割,但是這次我們使用垂直分割,命令如下:

$ tmux split-window -v -t development

通過這種方法可以非常簡便地自定義當(dāng)前已存在的工作環(huán)境。下面來看看其它的一些命令。

編寫一個項目配置腳本

在第一章,我們討論了譬如 new-sessionnew-window 的 tmux 命令。下面我們來編寫一個簡單的腳本,創(chuàng)建一個新的 tmux 會話,它含有多個窗口,有一個窗口會包含多個面板。最重要的是,我們讓每個面板都運行不同的程序。

我們從創(chuàng)建一個新的腳本文件開始,在主目錄下創(chuàng)建一個名為 development 的腳本。然后賦予這個文件可執(zhí)行權(quán)限,這樣就可以運行它了。命令如下:

$ touch ~/development
$ chmod +x ~/development

在這個新的腳本文件里,首先創(chuàng)建一個名為 development 的 tmux 會話,內(nèi)容如下:

tmux new-session -s development -n editor -d

在創(chuàng)建這個會話的同時我們給它傳入了一些附加的參數(shù)。首先,創(chuàng)建這個會話并為它命名,使用了 -s 參數(shù)。然后把初始窗口命名為 editor,然后再通過 -d 參數(shù)立即從這個新的會話中分離。

開始使用會話時,我們希望把工作目錄變更到項目目錄。我們把項目目錄稱作 devproject。當(dāng)然,在變更到這個目錄之前,最好先創(chuàng)建它,命令如下:

$ mkdir ~/devproject

目錄創(chuàng)建之后,我們把下面一行內(nèi)容添加到配置文件中,這里使用了 send-keys 命令:

tmux send-keys -t development 'cd ~/devproject' C-m

我們在這行配置的最后添加了一個 C-m(Control-M),這樣就向 tmux 里發(fā)送了一個回車符。接下來我們就可以重復(fù)使用這條命令,在窗口里打開 Vim 編輯器。就像這樣:

tmux send-keys development 'vim' C-m

通過這 3 個命令,我們就已經(jīng)創(chuàng)建了一個新的會話,變更了工作目錄,并打開了一個編輯器。但是我們的工作環(huán)境還沒有配置完成。我們來分割一下主編輯窗口,這樣就能在底部擁有一個小的終端窗口。我們使用 split-window 命令來完成這項任務(wù)。在我們的腳本里,添加這樣一行:

tmux split-window -v -t development

這樣就會讓主窗口水平地分割。還可以在分割時指定窗口所占的百分比,像這樣:

tmux split-window -v -p 10 -t development

但是我們并不會這樣做,我們會把 split-window 命令放到一邊,然后選擇一個 tmux 默認(rèn)布局—— main-horizontal ——只需要把下面的內(nèi)容添加到配置中:

tmux select-layout -t development main-horizontal

我們已經(jīng)創(chuàng)建了第一個窗口并把它分割為兩個面板,但是我們需要讓底部的面板需要在打開時就處于項目目錄的位置。我們已經(jīng)知道如何向 tmux 實例發(fā)送命令,接下來我們會學(xué)習(xí)如何向指定的面板和窗口發(fā)送命令。

指定目標(biāo)面板和窗口

通過例如 send-keys 這樣的命令,不僅可以指定目標(biāo)會話,也可以指定窗口和面板。在第 2 章的配置文件里,我們指定了初始索引為 1,也就是說窗口從 1 開始編號(而不是從 0 開始)。但是這個初始索引并不會影響到面板的索引編號,這也就是我們?yōu)槭裁匆惨衙姘宓某跏妓饕O(shè)置為 1 的原因。在下面的例子里當(dāng)前窗口有兩個面板,如圖9(兩個面板)所示:

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號