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