在远程服务器上,我打开了多个屏幕,并且将每个屏幕用于不同的目的。例如,ID 为“build”的屏幕用于编译某些程序。我可以随时打开该屏幕,使用:
ssh myserver -t screen -r build
但是,我想直接从我的主机在远程屏幕上执行命令。例如,我想ls
在远程build
屏幕中执行操作。我尝试过类似的事情:
ssh myserver -t screen -r build -X ls .
但没有任何运气。
有任何想法吗?这可能吗?
谢谢!
编辑:我的实际用例:
./buildSomethingOnRemoteScreen() && ./fetchTheBuiltOutputAndDoSomethingWithIt()
答案1
您可以使用粘贴命令执行任何脚本:
# read script into register p
ssh hostname screen -S build -X readreg p script_on_the_host
# paste contents of register p into running screen session
ssh hostname screen -S build -X paste p
答案2
我在服务器上使用 tmux (比 screen 更灵活),并在连接后直接执行命令:
ssh myserver -t 'tmux send-keys -t session-name "ls ./" C-m; tmux attach -t session-name '
您只需确保有一个以会话名称运行的会话。输入“ls ./”后,Cm 会模拟 ENTER
答案3
在远程屏幕上执行命令的示例:
ssh myserver -t screen -S build -X stuff "ls .\n"
-X
选项传递屏幕特定命令。其中一个命令就是stuff
简单地将给定字符串放入(填充)窗口的输入缓冲区中。如果省略换行符,则不会输入命令(与忘记按 Enter 键相同)。串行终端可能需要输入命令\r
而不是命令。\n
使用时,如果有多个运行,-X
则需要指定会话名称。-S
使用时-X
您可以使用 预选窗口-p
。否则使用活动的。
如果命令存储在文件中或者串行终端速度较慢且需要 的效果,则使用readreg
/register
和命令是可行的。paste
slowpaste