连接到GNU屏幕然后执行命令

时间:2016-08-17 22:42:38

标签: linux bash ssh gnu gnu-screen

我已经看到一些类似的问题,但解决方案似乎不适用于我的情况。

我正在尝试通过SSH连接到Node计算机上的特定屏幕实例,然后执行一些命令

我目前的流程是:

在远程计算机上,我创建了一个屏幕实例:

screen -dmS "my_screen"

从我的本地机器上我做了类似的事情:

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X stuff 'ruby my_script.rb'

但输出只是:

(ip)关闭时的连接。

并且没有运行ruby脚本。

如果我将命令分开,那么脚本会正确运行,例如:

ssh <user>@<remote> -a -x -t screen -x -r my_screen

它连接到屏幕,然后我手动输入:

ruby my_script.rb
exit

然后脚本按预期在屏幕上执行。

将命令发送到屏幕的正确方法是什么?

2 个答案:

答案 0 :(得分:0)

在第二个示例中,您通过在控制台中键入命令来执行命令。如果这是您要模拟的行为,则可以使用stuff命令将screen文本粘贴到控制台中以执行它。

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X stuff \"ruby my_script.rb^M\"

(注意^ M是使用CTRL-V,CTRL-M生成的。)

这不会向您的开放终端显示任何内容,但是当您重新连接到屏幕时,您应该看到命令的输出(假设您发送命令时屏幕位于控制台窗口,是这种方法的风险。)

答案 1 :(得分:0)

你应该使用exec而不是东西。顾名思义,exec在屏幕内执行命令

ssh <user>@<remote> -a -x -t screen -x -r my_screen -X exec ruby myscript.rb