我有 10 个屏幕在分离模式下运行。当我这样做时,screen -r pid
我可以看到其中之一的输出。手册页说ctrl-a + n
将向我显示下一个屏幕,但是当我这样做时,它说:No other window.
我缺少什么?
答案1
键顺序是Ctrl+ a,然后松开这些键并按n。
我总是参考这个备忘单,标题为:屏幕快速参考。
如果您尝试循环浏览 10 个屏幕会话,就好像它们是窗口一样,但据我所知,它们不是窗口,也不可能是窗口。在屏幕术语中,会话和窗口是两个完全不同的东西。
答案2
您可以尝试screen
使用多个窗口运行一个会话,并通过 提前配置每个窗口~/.screenrc
。这是一个工作示例:
# Automatically running some programs in windows on screen startup.
# The following will open top in the first window, an ssh session to
# monkey in the next window, and then open mutt and tail in windows 8
# and 9 respectively.
screen top
screen -t monkey ssh monkey
screen -t mail 8 mutt
screen -t daemon 9 tail -f /var/log/daemon.log
从那里偷来的/etc/screenrc
——那里有很多干净的、记录在案的screen
配置示例。
答案3
这些很方便:
- Ctrla space— 下一个窗口
- Ctrla backspace— 上一个窗口
- Ctrla "— 窗口列表菜单
- Ctrla 0— 选择窗口 0
(也可以看看man screen
)
答案4
您可以使用 shell 脚本来完成此操作,例如
for s in `screen -ls | grep Detached | grep <regex to your screen names>`; do screen -r $s; done
运行此命令后,在第一个屏幕中,键入Ctrl+ a,释放,然后隐藏d(用于分离)。您将退出当前屏幕,bash 脚本将立即带您进入下一个屏幕。
假设您打开的屏幕很少。我们还假设您将它们分类为工作和数据。
for i in {10..13}; do screen -S `printf data%02d $i`; done; for i in {0..5}; do screen -S `printf work%02d $i`; done; ...
申请后
screen -ls
,你的屏幕应该是这样的There are screens on: 81592.data13 (Detached) 81539.work04 (Detached) 81527.work02 (Detached) 81586.data12 (Detached) 81574.data10 (Detached) 81533.work03 (Detached) 81488.work00 (Detached) 81607.ttys014.Mo (Attached) 81545.work05 (Detached) 81580.data11 (Detached) 81521.work01 (Detached) 81515.work00 (Detached) 12 Sockets in /var/folders/qs/cvlbhpr54fnb96vtx01bs9k00000gn/T/.screen.
现在让我们使用 隔离分离的屏幕
grep
。screen -ls | grep Detached
你应该得到这样的东西
81592.data13 (Detached)
81539.work04 (Detached)
81527.work02 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81533.work03 (Detached)
81488.work00 (Detached)
81545.work05 (Detached)
81580.data11 (Detached)
81521.work01 (Detached)
81515.work00 (Detached)
现在让我们再次使用 来选择您想要的(例如数据)
grep
。screen -ls | grep Detached | grep data
这将仅隔离数据屏幕。您可以使用正则表达式更改 grep 关键字进行搜索以自定义您的搜索。
81592.data13 (Detached)
81586.data12 (Detached)
81574.data10 (Detached)
81580.data11 (Detached)
幸运的是,结果结构良好且以制表符分隔。现在让我们将列拆分为字段并使用 选择第二个字段
cut
。screen -ls | grep Detached | grep data | cut -d' ' -f2
您需要按 Tab 键在分隔符参数后面ctrl+v
插入一个。结果应该是这样的。tab
-d
81592.data13
81586.data12
81574.data10
81580.data11
现在使用引号将其打包到命令中
...
,并像这样循环结果。在实际运行之前,请务必首先检查制定的命令。我用了echo screen -r
for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ echo screen -r $s; \ done
如果一切顺利,那么尝试不使用
echo
.for s in `screen -ls | \ grep Detached | grep data | \ cut -d' ' -f2`; do \ screen -r $s; \ done
瞧。您脱离的每个屏幕都会带您进入下一个屏幕。
快乐放映!