【问题标题】:shell script for byobu commandsbyobu 命令的 shell 脚本
【发布时间】:2017-04-27 15:38:28
【问题描述】:

需要编写一个 shell 脚本,用单独的选项卡打开 byobu 终端。第一行打开新的byobu 会话,后续行连接到该会话并打开新选项卡。它是一种自动打开终端。

前-

byobu new-session -s "Server" "redis-server"

byobu new-window "redis-cli"

byobu new-window "sudo mongod --port 27017 --dbpath /data/db/rs0 --replSet rs0"

byobu new-window "mongo"

这里的问题是当我运行这个 shell 脚本时,它只运行第一个命令然后停止。如果我再次运行它,它会执行带有消息的剩余行:

重复会话:服务器

我在这里做错了什么?

【问题讨论】:

    标签: shell scripting byobu


    【解决方案1】:

    我认为您缺少 shell 脚本的第一行。看看这是否有效

    #!/bin/sh
    # byobu_launcher.sh ver 20170915122301 Copyright 2017 alexx, MIT Licence ver 1.0
    
    byobu new-session -d -s $USER
    
    # redis window
    byobu rename-window -t $USER:0 'redis-cli'
    byoby send-keys "redis-cli" C-m
    byobu split-window -v
    
    # mongod
    byobu new-window -t $USER:1 -n 'mongod'
    byobu send-keys "sudo mongod --port 27017 --dbpath /data/db/rs0 --replSet rs0" C-m
    
    # mongo
    byobu new-window -t $USER:1 -n 'mongo'
    byobu send-keys "mong" C-m
    
    # Set default window as the dev split plane
    byobu select-window -t $USER:1
    
    # Attach to the session you just created
    # (flip between windows with alt -left and right)
    byobu attach-session -t $USER
    

    使用 screen 你可以通过添加到 ~/.screenrc 的末尾来做到这一点

    screen -t redis-cli 0
    stuff "redis-cli\n"
    screen -t mongod 1
    stuff "sudo mongod --port 27017 --dbpath /data/db/rs0 --replSet rs0\n"
    screen -t mongo 2
    stuff "mongo\n"
    select 1
    

    我主要使用屏幕,有时使用 tmux。我没用过byoby。

    【讨论】:

    • 终于有人回答了,我很高兴。实际上第一行已经存在,但感谢您的回答:)
    • 您不需要在send-keys 命令中使用-t $USER:<number> 吗?
    • @m01 你可以,但这当然不是强制性的。 (虽然听起来确实是个好习惯。)man 只是说-t name“设置标题”试试-t this_example
    • 看起来如果没有指定-t <target pane>send-keys 命令会转到最后创建的会话/窗口
    【解决方案2】:

    我之前写过这个,也许对你有帮助 cmets很少,但功能名称很明显

    #!/bin/bash
    
    # create terminals and rename
    
    
    
    
    function extract_session() {
        arg=$1
        [[ ! "${line:0:1}" = "[" ]] && echo Not a session block && exit 1
        [[ ! "${line: -1}" = "]" ]] && echo Not a session block && exit 1
        echo "${arg:1:-1}"
    }
    
    function new_session(){
        sess=$1
        if [[ $(byobu has-session -t ${sess} &> /dev/null; echo $?) -eq 0 ]] 
        then
          echo Session ${sess} already exists
        else
          printf "Starting new session %s\n" "${sess}"
          byobu new-session -d -s ${sess}
        fi
    }
    
    function new_window(){
        win=$1
        printf "Window %s: %s\n" "${win_id}" "${win}"
        if [[ ${win_id} -eq 0 ]]
        then
        byobu rename-window -t ${win_id} ${win}
        else
        byobu new-window -n ${win} 
        fi
        byobu select-pane -t ${pane_id} -T ${win}
    }
    
    function new_pane(){
        pane_name=$1
        printf "\t%s\t%s %s\n" ${pane_id} "${pane_name}" "${split}"
        byobu select-window -t ${win_id}
        byobu split-window ${split}
        byobu select-pane -t ${pane_id} -T ${pane_name}
        
    }
    
    while read line
    do
        if [[ "${line:0:1}" = "[" ]]
        then
        # begin SESSION
        SESSION=$(extract_session ${line})
        new_session ${SESSION}
        win_id=0
        else
        pane_id=0
        # create windows with panes
        for pane in ${line[@]}
        do
            if [[ "${pane:0:1}" = "|" ]]
            then
            # create horizontal pane
            pane=${pane: 1}
            split=-h
            else
            # create vertical pane
            split=-v
            fi
            if [[ ${pane_id} -eq 0 ]]
            then
            new_window ${pane}
            else
            new_pane ${pane}
            fi
            pane_id=$((pane_id+1))
        done
        win_id=$((win_id+1))
        printf "\n"
        fi
        
    done <<EOF
    [guake]
    ipython
    sam |sam
    ROOT iROOT
    scp
    TDOD
    vpn
    [joplin]
    [RTERM]
    sam
    ROOT
    man
    [xterm]
    monitor | htop | net
    ROOT
    man
    [LTERM]
    sam
    ipython
    ROOT
    man
    [DEV]
    iPython |tail |run
    run2
    help
    auto-scp
    django
    django-srv
    [ansible]
    playbook
    inventory
    [SSH]
    ssh
    [SSH2]
    ssh
    [SSH3]
    ssh
    
    EOF
    

    底部的部分是此处的文档,您可以在其中添加会话名称,并带有窗格。 我还想添加一些应该执行的命令,但我已经到了那里

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-13
      • 2016-11-28
      • 2014-11-21
      • 2016-11-14
      • 2013-02-17
      • 1970-01-01
      • 1970-01-01
      • 2020-11-30
      相关资源
      最近更新 更多