如何向 GNU Screen 会话发送命令?如果我以交互方式使用会话,我会输入Ctrl+A转义序列。
我需要从其他位置(可能是 BASH Shell 脚本、PHP 页面等)向 GNU SCREEN 会话发送特定的击键,以操作仅作为“基于文本的 UI”(如lynx
或vim
)工作的程序。有时,我需要查看屏幕上发生的情况,因此我使用命令导出视图hardcopy -h outputFile
。
我需要将Ctrl+A然后“填充”:到屏幕中,但它不允许我发送Ctrl+ A。我试过这个:
$screen -S test -p 0 -X stuff '^A:'
但这只会在屏幕中放置一个冒号 (:) 并忽略 ^A。
我目前所做的(不起作用,需要手动干预才能完成第三步):
设置屏幕
$屏幕-S测试
将命令注入屏幕
$screen -S test -p 0 -X stuff 'python^M'
$屏幕-S测试-p 0 -X东西'42 * 9 ^ M'在屏幕内,您可以执行 Ctrl+A然后:调出屏幕的命令输入。在该输入中,我输入以下内容:
:硬拷贝-h /tmp/scr-test.txt
cat
然后我可以通过-ing 文件来获取屏幕内容:$猫/tmp/scr-test.txt
其产生:
$cat /tmp/scr-test.txt
justin@justin2012:~$ python
Python 2.7.8(默认,2014 年 10 月 18 日,12:50:18)
[GCC 4.9.1] 在 linux2 上
输入“help”,“copyright”, “积分”或“许可证”以获取更多信息。
>>> 42*9
378
>>>
答案1
screen -S test -p 0 -X stuff '^A:'
确实有效,但它执行了它应该执行的操作,而不是您想要执行的操作:它将两个字符^A
和发送:
到在屏幕窗口中运行的应用程序。这就是该stuff
命令的作用:它将字符发送到屏幕窗口中运行的应用程序,而不是屏幕界面。
您想要做的是将命令发送到屏幕本身,而不是发送到屏幕内运行的应用程序。所以不要使用该stuff
命令:这不是它的用途。您正在寻找的功能很简单screen -X …
,这screen -X stuff …
是一个特例。
例如,要使 screen 执行hardcopy
命令,请运行
screen -S test -p 0 -X hardcopy -h outputFile