Linux 在Screen中,如何在单个屏幕会话中向所有虚拟终端窗口发送命令?
我知道如何在启动时在一个屏幕会话中创建多个窗口:Linux 在Screen中,如何在单个屏幕会话中向所有虚拟终端窗口发送命令?,linux,gnu-screen,Linux,Gnu Screen,我知道如何在启动时在一个屏幕会话中创建多个窗口: 但是,一旦我启动并运行它们,是否有一种方法可以将我的输入发送到所有打开的窗口,而不仅仅是当前关注的窗口?我在这里找到了一个很好的教程: 从职位: 一旦您习惯了多个窗口,您可能会遇到这样的情况:您希望向其中几个打开的窗口发送相同的命令。屏幕中提供了“at”命令来执行此操作。首先,您需要打开命令行模式 C-a:(冒号)进入命令行模式 这样,您可以键入一次命令,但仍必须输入每个单独的窗口。但是有更好的办法。例如,我们将向所有窗口发送“ls-l” 在“
但是,一旦我启动并运行它们,是否有一种方法可以将我的输入发送到所有打开的窗口,而不仅仅是当前关注的窗口?我在这里找到了一个很好的教程: 从职位: 一旦您习惯了多个窗口,您可能会遇到这样的情况:您希望向其中几个打开的窗口发送相同的命令。屏幕中提供了“at”命令来执行此操作。首先,您需要打开命令行模式 C-a:(冒号)进入命令行模式 这样,您可以键入一次命令,但仍必须输入每个单独的窗口。但是有更好的办法。例如,我们将向所有窗口发送“ls-l” 在“#”stuff“ls-l^M” 这个命令几乎不可读,所以让我们把它拆开!第一部分是“at[identifier][#|*|%]命令”。at命令将文本参数发送到标识符中指定的所有窗口。您可以使用%将条件与窗口名或数字与#、用户名与*或显示相匹配。下一部分是要在选定窗口中运行的命令。我们使用“stuff”将要执行的命令填充到所选窗口的输入缓冲区中。事情真的很简单。它只是填充作为参数提供的字符串。下一个问题是命令。或者更确切地说是执行它!若要使屏幕在命令后显示“回车”,若要执行命令,请在末尾添加“^M”。除了向输入端发送ls外,您还可以做更多的事情。任何屏幕命令,比如重命名、移动窗口等等。。可与“at”组合使用
很抱歉,这个迟来的答复,但是对于您来说,
tmux
可能比screen
更好。在tmux
中,您必须按:C-b:
进入命令模式并输入:setw synchronize窗格
(或者只需使用自动完成功能setw sync
)。请注意,此命令启用窗格之间的同步(一个拆分屏幕的区域,同时可见),但不启用窗口之间的同步(完整屏幕,而不是拆分屏幕) 您可能还希望只发送到选定的窗口(多播)
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
screen -S SessionName -X at ".#" stuff "date
"
+1代表“东西”。非常感谢,科里!这是一百万次被遗忘的屏幕会话慢慢消亡的声音:
screen-X在“感谢飞行的Vim”^UTMOUT=3600^M“
+1链接中断):回程链接:这是一种比其他答案更好的方式和视觉体验。对不起,问题是关于屏幕,我同意tmux是一个更好的程序,但这在这里并不重要。