2016-08-17 54 views
1

我看过一些类似的问题,但解决方案似乎不适用于我的情况。附加到GNU屏幕上,然后执行命令

我想SSH到一个特定的屏幕实例的节点机上,然后执行一些命令

我现在的流程是这样的:

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

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

自动执行'screen'是kludgey。由于现代建筑和体面的文档,“tmux”更容易自动化。 – chicks

回答

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生成的)。

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

+0

非常感谢,这工作! 我不知道为什么,但我的其他方法来放行换行似乎没有注册时,在远程屏幕上执行,但这完美的工作! – Mundisoft

0

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

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