您如何从屏幕会话中编写 gnu screen 脚本以打开新窗口并在其中运行命令?
Posted
技术标签:
【中文标题】您如何从屏幕会话中编写 gnu screen 脚本以打开新窗口并在其中运行命令?【英文标题】:how do you script gnu screen from within a screen session to open new windows and run commands in them? 【发布时间】:2010-01-28 16:55:16 【问题描述】:在屏幕会话中,我想运行一个打开的 shell 脚本 同一会话中的几个新屏幕窗口并开始运行一些 程序。
我需要这样的脚本:
screen -t newWindow
[switch to newWindow and execute a command]
screen -t newWindow2
[switch to newWindow2 and execute a command]
我不知道如何实现我在括号中描述的效果。 有什么线索吗?请注意,这不是我将运行以开始屏幕会话的脚本。我需要此脚本可在现有屏幕会话中运行,以便将新窗口添加到会话中。
【问题讨论】:
【参考方案1】:注意:您无法从屏幕会话中启动脚本工作。它会在会话中打开没有标签...它更多的是相关提示而不是问题的真正答案。
如果您接受通过运行进程来进行屏幕会话,还有其他解决方案......
新会话脚本
#!/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.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 中编写脚本的人,我制作了一个小库来创建会话、关闭会话、注入命令:ScreenUtils.py
这是一个小项目,不处理多窗口屏幕会话。
忘了说我很久以前用它做了一个真正的python库:https://github.com/Christophe31/screenutils
【讨论】:
【参考方案2】:在屏幕内运行此脚本可以满足我的要求:
#!/bin/bash
screen vi
screen top
【讨论】:
如果您在现有的屏幕会话中运行它似乎不起作用。 嗯。似乎在 Ubuntu Karmic 上使用“Screen version 4.00.03jw4 (FAU) 2-May-06”为我工作。摆脱我的.screenrc
以检查那里没有任何相关内容。跑screen
进行新会话。 C-a"
显示一个窗口 bash
。 Ran ./aa.sh
就是上面的脚本。现在我看到vi
和C-a"
列出了bash
、vi
和top
。
更一般地说,重要的是环境变量STY
的值。如果我运行screen -list
来查找我的会话的名称,然后从会话外部执行STY=32720.pts-1.lundy ./aa.sh
,那么命令将在现有会话中启动。它在会话内部工作,因为STY
会自动设置;通过echo $STY
确认这一点。
但这并不适用于使用多个命令,例如screen -t newWindow cd ~/rails && script/server
将多个命令包装在一个子shell中:screen -t newWindow bash -c 'cd ~/rails && script/server'
以上是关于您如何从屏幕会话中编写 gnu screen 脚本以打开新窗口并在其中运行命令?的主要内容,如果未能解决你的问题,请参考以下文章