代码之家  ›  专栏  ›  技术社区  ›  dan

如何在屏幕会话中编写GNU屏幕脚本以打开新窗口并在其中运行命令?

  •  1
  • dan  · 技术社区  · 15 年前

    在屏幕会话中,我想运行一个打开的shell脚本 在同一个会话中有几个新的屏幕窗口,并开始运行一些 其中的程序。

    我需要这样的脚本:

    screen -t newWindow
    [switch to newWindow and execute a command]
    screen -t newWindow2
    [switch to newWindow2 and execute a command]
    

    我不知道如何达到我在括号中描述的效果。 有什么线索吗?请注意,这不是我要运行的脚本 开始 屏幕会话。我需要在现有的屏幕会话中运行此脚本,以便向会话添加新窗口。

    2 回复  |  直到 9 年前
        1
  •  1
  •   P-Nuts    15 年前

    在屏幕内运行此脚本将执行我认为您需要的操作:

    #!/bin/bash
    
    screen vi
    screen top
    
        2
  •  3
  •   christophe31    9 年前

    注意:您不能从屏幕会话中按如下方式启动脚本。它将在会话中打开,没有标签…它更像是一个相关的提示,而不是一个真正的问题答案。

    还有另一种解决方案,如果您接受通过运行进程进行屏幕会话…

    新建会话脚本

    #!/bin/sh
    echo "nouvelle session screen ${sessionName}"
    screen -S ${sessionName}  init.sh
    echo "screen session: done"
    echo "go to ${AnyWhere}"
    sleep 1
    screenexec ${sessionName} "cd ${AnyWhere}"
    

    init脚本(此处为“init.sh”)

    #!/bin/zsh
    zsh -c "sleep 0.2"
    screen -d #detach the initialised screen
    zsh       #let a prompt running
    

    注入脚本(此处为screenexec)

    #!/bin/sh
    # $1 -> nom de screen cible  $2 -> commande
    echo "injection de «${2}» dans la session «${1}» ..."
    screen -x "$1" -X stuff "$2"              #inject the command
    screen -x "$1" -X eval "stuff \015"       #inject \n
    echo "Done"
    

    通过使用这种方式,您应该可以轻松地在屏幕中插入代码,如果您的脚本像一个牧师一样,那么这很有意思…

    对于那些喜欢用Python编写脚本的人,我做了一个小的lib来创建会话、关闭会话、注入命令: ScreenUtils.py

    这是一个小项目,不处理多窗口屏幕会话。

    忘了提我很久以前就用它做了一个真正的python库: https://github.com/Christophe31/screenutils