tmux 怎么用 shell 脚本操作? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
wsseo
V2EX    Linux

tmux 怎么用 shell 脚本操作?

  •  
  •   wsseo 2020-08-26 09:35:57 +08:00 4522 次点击
    这是一个创建于 1941 天前的主题,其中的信息可能已经有所发展或是发生改变。
    #!/bin/sh #服务器要起一些程序,目前在测试阶段,所有很多组件都在前台运行 #每次都用 tmux 一个一个启动,ctrl+b c,ctrl+b c....,比较麻烦 tmux new -s testapp 执行 app01,有前台输入 新建一个窗口,执行 app02 再建一个窗口,执行 app03 ... 最后退出 这样的操作用 shell 脚本怎么写? 
    16 条回复    2020-08-27 09:42:58 +08:00
    nickchenyx
        2
    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
        3
    lululau  
       2020-08-26 09:47:35 +08:00
    systemd, supervisor, foreman 之类的不香吗

    非用 tmux 的话,直接调 tmux sub-commands 也可以,或者用 tmuxinator 之类的
    vsyour
        4
    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 分钟.
    simple2025
        5
    simple2025  
       2020-08-26 10:14:40 +08:00
    tmuxp?
    simple2025
        6
    simple2025  
       2020-08-26 10:15:07 +08:00
    还有输入?那忽略我吧
    wsseo
        7
    wsseo  
    OP
       2020-08-26 10:22:03 +08:00
    @chenqh 是有输出,笔误了
    ksc010
        8
    ksc010  
       2020-08-26 10:30:59 +08:00
    https://github.com/tmux-python/libtmux
    python 操作 tmux 的库
    simple2025
        9
    simple2025  
       2020-08-26 10:33:38 +08:00
    @wsseo 那就 tmuxp
    simple2025
        10
    simple2025  
       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
        11
    wsseo  
    OP
       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
        12
    wsseo  
    OP
       2020-08-26 11:00:37 +08:00
    tmux new-window -t testapp:1 -d
    LudwigWS
        13
    LudwigWS  
       2020-08-26 11:25:05 +08:00
    挺有意思的,学习一下
    ksc010
        14
    ksc010  
       2020-08-26 14:40:57 +08:00
    还有一个方法就 安装 mux
    使用编写配置文件
    secondwtq
        15
    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
        16
    billgreen1  
       2020-08-27 09:42:58 +08:00
    tmuxinator
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5215 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 06:43 PVG 14:43 LAX 22:43 JFK 01:43
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86