我知道如何在启动时在单个屏幕会话中创建多个窗口:
但是,一旦我启动并运行,有没有办法可以将我的输入发送到所有打开的窗口,而不仅仅是当前关注的窗口?
Cor*_*son 32
我在这里找到了一个很好的教程:
从帖子:
一旦您习惯了多个窗口,您可能会遇到要向其中几个打开的窗口发送相同命令的情况.屏幕提供"at"命令来执行此操作.首先,您需要打开命令行模式.
Ca :(冒号)进入命令行模式.
这样您就可以输入一次命令,但是您仍然需要输入每个单独的窗口.但还有更好的方法.作为一个例子,我们将"ls -l"发送到所有窗口.
在"#"的东西"ls -l ^ M"
这个命令几乎不可读,所以让我们分开吧!第一部分是'at [identifier] [#|*|%] command'.at命令将text参数发送到您在标识符中指定的所有窗口.您可以使用%将条件与窗口名称或数字匹配,#,用户名带*或显示.下一部分是您要在所选窗口中运行的命令.我们使用"stuff"将我们想要执行的命令填充到所选窗口的输入缓冲区中.东西真的很简单.它只是将您提供的字符串填充为参数.下一个问题是命令.或者说执行它!要使屏幕在命令后面输入"enter",要执行命令,最后添加"^ M".你可以做更多的事情而不仅仅是向输入发送ls.任何屏幕命令,如重命名,移动窗口等等,都可以与"at"结合使用.
小智 8
很抱歉这个迟来的回复,但tmux对你来说可能是一个更好的选择screen.在tmux,您必须按:C-b :进入命令模式并输入:( setw synchronize-panes或仅setw sync<Tab>使用自动完成).请注意,此命令启用窗格(一个分屏的区域,同时可见)之间的同步,但不启用窗口之间的同步(完整,不分割,屏幕).
小智 5
您可能还希望仅发送到选定的窗口(多播).
根据需要设置标题.
screen -S SessionName -p 0 -X title "remote_0" # window 0: ignore multicast
screen -S SessionName -p 1 -X title ".remote_1" # window 1: listen to multicast
Run Code Online (Sandbox Code Playgroud)使用屏幕的at命令将内容发送给侦听器
screen -S SessionName -X at ".#" stuff "date
"
Run Code Online (Sandbox Code Playgroud)注意:上面的结尾双引号确保发送^ M(Cr).
您可以通过这种方式基于窗口标题启用/禁用多播.
| 归档时间: |
|
| 查看次数: |
18654 次 |
| 最近记录: |