tmux命令启动MySQL_tmux启动脚本
每次機(jī)器關(guān)閉后,再次打開tmux需要重復(fù)執(zhí)行新建窗口,panel等操作,能否用腳本自動(dòng)化?可以!
tmux的命令,既可以在tmux內(nèi)執(zhí)行(perfix :),也可以在命令行中作為tmux的參數(shù)執(zhí)行,通過制定session,就可以在外部控制這個(gè)session的各種行為。后者就給了shell腳本控制tmux的機(jī)會(huì)!
首先我們先來了解一些腳本中需要用到的tmux命令:
新建對(duì)話
new-session [-AdDEP] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [shell-command]
新建一個(gè)tmux會(huì)話。
[-s session-name]指定會(huì)話的名字。
-d讓當(dāng)前的終端打開這個(gè)tmux對(duì)話。在腳本中我們一般會(huì)帶上這個(gè)參數(shù),因?yàn)槿绻苯幼尞?dāng)前終端打開這個(gè)tmux對(duì)話,腳本就不會(huì)繼續(xù)執(zhí)行了,也就無法定制這個(gè)tmux對(duì)話了。
[-n window-name]指定新建的會(huì)話的第一個(gè)窗口的名字。新建一個(gè)會(huì)話默認(rèn)會(huì)新建一個(gè)窗口。
[shell-command]指定在新建的窗口中執(zhí)行的shell命令
判斷一個(gè)對(duì)話是否存在
has-session [-t target-session]
判斷指定的tmux對(duì)話是否存在,如果存在返回碼為0,不存在返回碼為1
新建窗口
new-window [-adkP] [-c start-directory] [-F format] [-n window-name] [-t target-window] [shell-command]
新建一個(gè)window
[-t target-window]指定在哪個(gè)session新建window
[-n window-name]指定新window的名字
[shell-command]指定在新建的窗口中執(zhí)行的shell命令
選擇一個(gè)窗口
select-window [-lnpT] [-t target-window]
[-t target-window]切換到指定的window
新建一個(gè)panel
split-window [-bdhvP] [-c start-directory] [-l size | -p percentage] [-t target-pane] [shell-command] [-F format]
-h,-v 水平、垂直分割。這里我感覺tmux的分割和說的是相反的。。。因?yàn)?h會(huì)在中間畫一條豎線。。。
[-t target-pane]指定需要?jiǎng)澐值拿姘?/p>
發(fā)送按鍵到對(duì)應(yīng)的panel
send-keys [-lMR] [-t target-pane] key ...
key可以指定快捷鍵,比如C-a,C-m等。
附加到一個(gè)session上
attach-session [-dEr] [-c working-directory] [-t target-session]
[-t target-session]打開對(duì)應(yīng)的tmux對(duì)話
target-window和target-panel的命名規(guī)則
mysession:1指mysession對(duì)話的第一個(gè)窗口
mysession:name指mysession對(duì)話的叫name的窗口
mysession:1.0指mysession對(duì)話的第一個(gè)窗口的第0個(gè)面板。
tmux還支持很多靈活的命名方法來定位對(duì)應(yīng)的窗口或者面板,具體的可以參考tmux的man文檔。
注意:窗口和面板默認(rèn)從0開始編碼,但是可以通過設(shè)置來修改。我吧窗口設(shè)置為從1開始編碼,這樣切換窗口的時(shí)候比較方便。
關(guān)于執(zhí)行shell命令
這里的shell-command雖然是在tmux中執(zhí)行命令,但是和手動(dòng)在tmux中執(zhí)行是不一樣的。
比如new-window 'vi /etc/passwd',tmux會(huì)這樣執(zhí)行:/bin/sh -c 'vi /etc/passwd'
比如$ tmux new-window vi /etc/passwd,tmux會(huì)這樣執(zhí)行:vi /etc/passwd
這兩種情況,當(dāng)你退出這個(gè)vim的時(shí)候,這個(gè)窗口也會(huì)結(jié)束!因?yàn)檫@個(gè)窗口運(yùn)行的進(jìn)程退出了,窗口也會(huì)退出。
那如果我只想在窗口的bash中執(zhí)行命令作為子進(jìn)程呢?
可以使用send-keys命令。
例子
了解了一些tmux命令后,就可以弄一個(gè)啟動(dòng)tmux的demo腳本了。
我的配置可以參考:tmux使用與配置
要求:啟動(dòng)tmux,第一個(gè)窗口打開家目錄,窗口的名字為home。第二個(gè)窗口打開vi,名字為edit。默認(rèn)顯示第一個(gè)窗口。第三個(gè)窗口水平分割。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24#!/bin/bash
#
# tumx啟動(dòng)腳本
# mushan 2016-05-20
# 兼容zsh
export DISABLE_AUTO_TITLE="true"
session="test"
tmux has-session -t $session
if [ $? = 0 ];then
tmux attach-session -t $session
exit
fi
tmux new-session -d -s $session -n home
tmux send-keys -t $session:1.0 'cd ~' C-m
tmux new-window -t $session:2 -n edit vi
tmux new-window -t $session:3
tmux split-window -t $session:3 -v
tmux select-window -t $session:1
tmux attach-session -t $session
為什么第一行有一個(gè)export DISABLE_AUTO_TITLE="true"呢?
這是因?yàn)槲沂褂昧藌sh,new-window -n windown_name老是不能生效,新窗口的名字還是當(dāng)前目錄名。這是因?yàn)閦sh會(huì)設(shè)置當(dāng)前shell標(biāo)題為當(dāng)前目錄名,bash就沒有這個(gè)問題。
zsh的這個(gè)功能可以通過設(shè)置export DISABLE_AUTO_TITLE="true"來關(guān)閉。
還有,因?yàn)槲沂褂昧藄et -g base-index 1這個(gè)配置,所以窗口是從1開始編碼的,這一點(diǎn)大家需要注意一下。
參考資料
總結(jié)
以上是生活随笔為你收集整理的tmux命令启动MySQL_tmux启动脚本的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql 语句优化实例_MySQL 语
- 下一篇: mysql存储过程中as_Mysql存储