每次机器关闭后,再次打开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启动脚本相关推荐

  1. kafka安装、配置、启动、常用命令及shell启动脚本编写

    config  :kafka配置文件所在目录 server.properties    主要配置文件 zookeeper.properties   kafka内置了zk,一般要将其替换掉 以下关于生产 ...

  2. jmeter远程启动命令_Jmeter命令行方式启动

    在性能测试过程中,我们常常遇到这样的问题,使用Jmeter的GUI界面进行大并发量的性能测试时,界面容易卡死,无法继续进行性能测试.通过使用命令行方式启动jmeter是一个不错的方式.下面就简单介绍一 ...

  3. linux startx无效_LINUX startx命令-用来启动X Window

    用来启动X Window 补充说明 startx命令 用来启动X Window,实际上启动X Window的程序为xinit. 语法 startx(参数) 参数 客户端及选项:X客户端及选项: 服务器 ...

  4. 第一章 Hadoop启动Shell启动脚本分析--基于hadoop-0.20.2-cdh3u1

    我的新浪微博:http://weibo.com/freshairbrucewoo. 欢迎大家相互交流,共同提高技术. 第一章 Hadoop启动Shell启动脚本分析 第一节 start-all.sh脚 ...

  5. cm-14.1 Android系统启动过程分析(4)-init进程的启动、rc脚本解析、zygote启动、属性服务

    声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的. 本文参考了一些书籍的若干章节,比如<Android进阶解密-第2章-An ...

  6. [日更-2019.4.8、4.9、4.12、4.13] cm-14.1 Android系统启动过程分析(一)-init进程的启动、rc脚本解析、zygote启动、属性服务...

    2019独角兽企业重金招聘Python工程师标准>>> 声明 前阶段在项目中涉及到了Android系统定制任务,Android系统定制前提要知道Android系统是如何启动的. 本文 ...

  7. 定时启动软件的脚本。同时也适用于定时打开游戏。

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.脚本简介 二.脚本内容 三.脚本自启动 总结 一.脚本简介 每天上班族上班第一件事就是登录各种办公软件,今天給大家带来了 ...

  8. linux停止network服务命令是,Linux启动关闭重启网络服务的两种方式

    注意:1.这三种方式主要用于以redhat为基础的发行版 2.如果还不知道运行级别是什么,那么最好先看看相关资料再实验 第一种方式:ln -s 建立启动软连接 在Linux中有7种运行级别(可在/et ...

  9. java 命令 一闪而过_tomcat启动不了一闪而过怎么办?tomcat一闪而过无法启动现象的解决方法...

    tomcat启动一闪而过怎么办成为了许多刚接触tomcat开发环境工作者的一个大问题,许多用户朋友都不知道是因为什么问题导致出现这种情况,马上点击查看tomcat一闪而过无法启动解决方法来解决您现在出 ...

最新文章

  1. PTAM增强现实相关
  2. php读取部分文章显示不出来了,织梦使用PHP5.3环境时遇到部分文章出现”读取附加信息出错“的解决办法jz1...
  3. 超声波测距的数据应该如何显示到七针oled上_一文读懂京东方、TCL华星、三星显示和LGD之间的复杂关系...
  4. springboot启动太慢优化
  5. 混口饭吃,谈不上喜欢
  6. aspx中如何加入javascript
  7. python读配置文件转字典_python中读取配置文件的方式
  8. 获取浏览器高度和宽度
  9. 【ember zigbee】第三章:ug103-02-fundamentals-zigbee 学习笔记(中)
  10. 阿里百秀项目实战day1
  11. kali linux 2020.4 自带浏览器英文改中文
  12. Orientation模块管理设备的方向信息,包括alpha、beta、gamma三个方向信息,通过plus.orientation可获取设备方向管理对象
  13. Java线程等待唤醒机制(加深理解)
  14. 职高学计算机可以考的大学名单,职高可以考的大学有哪些
  15. 【FPGA知识点】八段共阳极数码管编码表
  16. 第四章:数据存储-csv文件处理-读取csv文件的两种方式
  17. SQL Developer的下载、安装和连接Oracle数据库
  18. linux密码配置文件详解,用户配置文件与密码配置文件
  19. [Java] [OpenGL ES3.2] 正多边形
  20. Arduino大师练成手册 -- 初识Arduino和开发环境搭建

热门文章

  1. python整数和浮点数相乘_python中整数除法和浮点数到整数转换之间的区别是什么原因?...
  2. stmt在java中的应用_JDBC技术基础总结转载,非原创
  3. 设置mysql整形_mysql 整型字段设计
  4. linux网络管理技术,linux网络管理 一
  5. java可变长字符串_具有可变长度的scala字符串插值
  6. android wifimanager权限,Android 6.0.1 - 权限问题= wifiManager.getScanResults()返回0
  7. php编写开机启动脚本,设置 msyql php-fpm 开机自动启动脚本
  8. 【Python金融量化 6- 100 】、六、蒙特卡洛预测微软股票
  9. php贝叶斯,php – 将单个概率与朴素贝叶斯垃圾邮件过滤相结合
  10. 非递减数列JAVA_C语言实现两个递减数列中寻找某一个数