如何转到屏幕中的下一个屏幕

如何转到屏幕中的下一个屏幕

我有 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 脚本将立即带您进入下一个屏幕。

  1. 假设您打开的屏幕很少。我们还假设您将它们分类为工作和数据。

     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;
     ...
    
  2. 申请后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.
    
  3. 现在让我们使用 隔离分离的屏幕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)
  1. 现在让我们再次使用 来选择您想要的(例如数据)grep

     screen -ls | grep Detached | grep data
    

这将仅隔离数据屏幕。您可以使用正则表达式更改 grep 关键字进行搜索以自定义您的搜索。

        81592.data13    (Detached)
        81586.data12    (Detached)
        81574.data10    (Detached)
        81580.data11    (Detached)
  1. 幸运的是,结果结构良好且以制表符分隔。现在让我们将列拆分为字段并使用 选择第二个字段cut

     screen -ls | grep Detached | grep data | cut -d'       ' -f2
    

您需要按 Tab 键在分隔符参数后面ctrl+v插入一个。结果应该是这样的。tab-d

81592.data13
81586.data12
81574.data10
81580.data11
  1. 现在使用引号将其打包到命令中...,并像这样循环结果。在实际运行之前,请务必首先检查制定的命令。我用了echo screen -r

     for s in `screen -ls | \
     grep Detached | grep data | \
     cut -d'     ' -f2`; do \
         echo screen -r $s; \
     done
    
  2. 如果一切顺利,那么尝试不使用echo.

     for s in `screen -ls | \
     grep Detached | grep data | \
     cut -d'     ' -f2`; do \
         screen -r $s; \
     done
    
  3. 瞧。您脱离的每个屏幕都会带您进入下一个屏幕。

快乐放映!

相关内容