附加到 GNU 屏幕,然后执行命令
Attach to a GNU screen and then execute commands
我看到过一些类似的问题,但解决方案似乎对我的情况不起作用。
我正在尝试通过 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
然后脚本按预期在屏幕中执行。
向屏幕发送命令的正确方法是什么?
在您的第二个示例中,您通过在控制台中键入命令来执行命令。如果这是您想要模拟的行为,您可以使用 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 生成的)。
这不会向您打开的终端显示任何内容,但是当您重新连接到屏幕时,您应该会看到命令的输出(假设在您发送命令时屏幕在控制台 window命令,这是这种方法的风险)。
您应该使用 exec 而不是 stuff。顾名思义,exec在屏幕内执行命令
ssh <user>@<remote> -a -x -t screen -x -r my_screen -X exec ruby myscript.rb
我看到过一些类似的问题,但解决方案似乎对我的情况不起作用。
我正在尝试通过 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
然后脚本按预期在屏幕中执行。
向屏幕发送命令的正确方法是什么?
在您的第二个示例中,您通过在控制台中键入命令来执行命令。如果这是您想要模拟的行为,您可以使用 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 生成的)。
这不会向您打开的终端显示任何内容,但是当您重新连接到屏幕时,您应该会看到命令的输出(假设在您发送命令时屏幕在控制台 window命令,这是这种方法的风险)。
您应该使用 exec 而不是 stuff。顾名思义,exec在屏幕内执行命令
ssh <user>@<remote> -a -x -t screen -x -r my_screen -X exec ruby myscript.rb