从会话外部调用屏幕命令

从会话外部调用屏幕命令

如何向 GNU Screen 会话发送命令?如果我以交互方式使用会话,我会输入Ctrl+A转义序列。

我需要从其他位置(可能是 BASH Shell 脚本、PHP 页面等)向 GNU SCREEN 会话发送特定的击键,以操作仅作为“基于文本的 UI”(如lynxvim)工作的程序。有时,我需要查看屏幕上发生的情况,因此我使用命令导出视图hardcopy -h outputFile

我需要将Ctrl+A然后“填充”:到屏幕中,但它不允许我发送Ctrl+ A。我试过这个:

$screen -S test -p 0 -X stuff '^A:'

但这只会在屏幕中放置一个冒号 (:) 并忽略 ^A。


我目前所做的(不起作用,需要手动干预才能完成第三步):

  1. 设置屏幕

    $屏幕-S测试

  2. 将命令注入屏幕

    $screen -S test -p 0 -X stuff 'python^M'
    $屏幕-S测试-p 0 -X东西'42 * 9 ^ M'

  3. 在屏幕内,您可以执行 Ctrl+A然后:调出屏幕的命令输入。在该输入中,我输入以下内容:

    :硬拷贝-h /tmp/scr-test.txt

  4. cat然后我可以通过-ing 文件来获取屏幕内容:

    $猫/tmp/scr-test.txt

  5. 其产生:

    $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 

答案2

为了实现我想要的,用户苏克明德柠檬汁Ctrl提供了两种访问++接口A的方式:,这很棒。

苏克明德写道:

使用怎么样eval?如在screen -S test -p 0 -X eval "hardcopy -h sample"

柠檬汁写道:

甚至只是screen -S test -p0 -X hardcopy out.txt

我已经测试过,两种解决方案都有效。我想我还是会用苏克明德的解决方案,因为它允许我保留参数-h

相关内容