tmux 怎么用 shell 脚本操作?

2020-08-26 09:35:57 +08:00
 wsseo
#!/bin/sh
#服务器要起一些程序,目前在测试阶段,所有很多组件都在前台运行
#每次都用 tmux 一个一个启动,ctrl+b c,ctrl+b c....,比较麻烦
tmux new -s testapp
执行 app01,有前台输入
新建一个窗口,执行 app02
再建一个窗口,执行 app03
...
最后退出
这样的操作用 shell 脚本怎么写?
3767 次点击
所在节点    Linux
16 条回复
ysc3839
2020-08-26 09:39:18 +08:00
nickchenyx
2020-08-26 09:46:53 +08:00
恰好我也有这样的诉求,我写了个 tmux-init.sh 脚本完成这个工作,等于重启的话执行下脚本就可以拉起工作台了。

```shell
# new bastion session
tmux new -s bastion -d
# rename window
## --- DEV ---
tmux rename-window -t "bastion:1" dev
# send command
tmux send -t "bastion:dev" '/Users/nickchen/workspace/bastion.sh java-run "cd /home/nickchen/java-app/"' Enter
# split window horizontally
tmux split-window -t "bastion:dev"
tmux send -t "bastion:dev" '/Users/nickchen/workspace/bastion.sh inner-01 "cd /opt"' Enter
# split window vertically
tmux split-window -h -t "bastion:dev"
tmux send -t "bastion:dev" '/Users/nickchen/workspace/bastion.sh inner-02 "cd /opt"' Enter
```

这是一部分啦,本质上都是一样的原理,去看下 tmux send 的操作就行,我这里是创建多个 window + 每个 window 分多个 panel 。
lululau
2020-08-26 09:47:35 +08:00
systemd, supervisor, foreman 之类的不香吗

非用 tmux 的话,直接调 tmux sub-commands 也可以,或者用 tmuxinator 之类的
vsyour
2020-08-26 10:07:34 +08:00
```bash
cd ;for i in `ls results_*/ -d`;do cd;cd $i;tmux new -s $i -d;tmux send -t "$i" 'for i in `seq 3`;do python3 run.py ;sleep 600;done' Enter;done

```
参考
功能介召:
1. 扫描当前目录中 results_ 开头的目录
2. 进入当前用户,进入 results_ 列表中的一个目录.
3. 创建一个以 results_xxxx 命名的 tmux 放到后台
4. 执行 results_xxxx 目录下的 run.py 脚本. 执行 3 次.每次执行完后暂停 10 分钟.
chenqh
2020-08-26 10:14:40 +08:00
tmuxp?
chenqh
2020-08-26 10:15:07 +08:00
还有输入?那忽略我吧
wsseo
2020-08-26 10:22:03 +08:00
@chenqh 是有输出,笔误了
ksc010
2020-08-26 10:30:59 +08:00
https://github.com/tmux-python/libtmux
python 操作 tmux 的库
chenqh
2020-08-26 10:33:38 +08:00
@wsseo 那就 tmuxp
chenqh
2020-08-26 10:35:42 +08:00
tmux 关闭自动 rename

vim ~/.tmux.conf

添加
```

set-window-option -g automatic-rename off
set-option -g allow-rename off
```
wsseo
2020-08-26 10:58:54 +08:00
先用笨方法
```
#!/bin/sh
#服务器要起一些程序,目前在测试阶段,所有很多组件都在前台运行
#每次都用 tmux 一个一个启动,ctrl+b c,ctrl+b c....,比较麻烦
tmux new -s testapp -d
tmux send-keys -t testapp:0 'ping www.baidu.com' C-m
tmux new-window -t testapp:1
tmux send-keys -t testapp:1 'vi haha.txt' C-m
...
wsseo
2020-08-26 11:00:37 +08:00
tmux new-window -t testapp:1 -d
LudwigWS
2020-08-26 11:25:05 +08:00
挺有意思的,学习一下
ksc010
2020-08-26 14:40:57 +08:00
还有一个方法就 安装 mux
使用编写配置文件
secondwtq
2020-08-26 14:59:58 +08:00
我正好搞过这个,需求是给 B 站直播 up 主录回放。方案是在一个 tmux pane 里面起一个循环轮询 B 站 API,检测到状态在直播就再开一个 pane 用 you-get 下载,完后 ffmpeg 转一遍: https://github.com/secondwtq/bmon

用不着 send-keys,直接东西写进一脚本里面 split-pane/new-window/split-window 就行,不然你开的 shell 还得手动关
billgreen1
2020-08-27 09:42:58 +08:00
tmuxinator

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/701460

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX