Gnu-Screen:运行脚本,将命令发送到正在运行的屏幕会话

时间:2009-05-22 19:31:09

标签: bash gnu-screen

是否有可能编写一个脚本来更改名称并启用当前选项卡的监控,假设它正在屏幕上运行?

感谢。

5 个答案:

答案 0 :(得分:9)

从屏幕联系方式:

  -X   Send the specified command to a running screen  session.  You  can
       use  the  -d or -r option to tell screen to look only for attached
       or detached screen sessions. Note that this command  doesn't  work
       if the session is password protected.

基本上,运行

screen -X title mynewtitle
screen -X monitor on

如果终端未在屏幕内运行,则会无声地出现错误:

notinscreen:~$ screen -X title mynewtitle
notinscreen:~$

您也可以将命令发送到特定会话,即使在分离时也是如此。给定名为“main”的屏幕会话:

$ screen -S main
[detach from screen session]
$ screen -ls
There is a screen on:
        2073.main       (Detached)
1 Socket in /tmp/uscreens/S-dbr.

..您可以将最后活动窗口的标题发送到blah

$ screen -x main -X title blah

..或特定窗口(在此示例中名为oldwindow):

$ screen -x main -p oldwindow -X title blah

您可以使用进程ID(来自-x main),而不是使用窗口名称(screen -ls),而不是使用-p oldwindow,您可以使用窗口编号:

$ screen -x 2073 -p 0 -X title h

如果只有一个会话,则不必指定会话PID或名称。

答案 1 :(得分:7)

我认为这有效:

if [-n "$STY"]; then
    screen -X title "foo"
    screen -X monitor on
fi

答案 2 :(得分:2)

屏幕声明$STY环境变量,您可以尝试使用它。

答案 3 :(得分:1)

您是否希望显示信息或与屏幕会话本身进行交互? 您可以使用以下方式发回消息:(http://www.slac.stanford.edu/comp/unix/package/epics/extensions/iocConsole/screen.1.html#lbAI

  

消息行   屏幕显示   信息性消息和其他   消息行中的诊断。而   这条线被分发出来   屏幕的底部,它可以   定义为出现在顶部   编辑期间的屏幕。如果你的   终端有一个定义的状态行   它的termcap,屏幕将使用它   显示其消息,否则a   当前屏幕的行将是   暂时覆盖并输出   会暂时中断。该   消息行被自动删除   几秒钟后延迟,但它可以   也可以提前删除(在终端上   没有状态线)开始   类型。

     

可以使用消息行设施   由运行在中的应用程序   当前窗口通过ANSI   隐私消息控制序列。对于   例如,从shell中,尝试   类似的东西:

echo '<esc>^Hello world from window '$WINDOW'<esc>\\' 
     

其中''是逃避,'^'是   字面向上箭头,'\'变成了   一个反斜杠。

答案 4 :(得分:0)

屏幕透明地运行,因此检测屏幕会话很难。如果您尝试发送按键,那将会起作用,并且如果您不在会话中,则会在终端上填充一点垃圾。