如何在 Gnu 屏幕中打开选项卡窗口并在每个选项卡窗口中执行命令

如何在 Gnu 屏幕中打开选项卡窗口并在每个选项卡窗口中执行命令

当启动会话时,命名为任何名称,如下所示screen -S name1

我想在此屏幕会话中打开选项卡窗口,就像在 gnome 终端中打开选项卡时一样

gnome-terminal --tab -e "some commands"

那么该怎么做呢?

答案1

1. 屏幕中的选项卡

您正在寻找将此内容添加到您的 .screenrc 文件中:

screen -t tab1
screen -t tab2

这是一个很好的基本 .screenrc,可帮助您开始使用状态栏等。笔记:它通常位于您的主目录中/home/<username>/.screenrc

screen -t validate #rtorrent
screen -t compile #irssi
screen -t bash3
screen -t bash4
screen -t bash5
altscreen on
term screen-256color
bind ',' prev
bind '.' next
#
#change the hardstatus settings to give an window list at the bottom of the
#screen, with the time and date and with the current window highlighted
hardstatus alwayslastline
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

截屏

屏幕会话的 ss

2. 屏幕中的选项卡(内部运行命令)

下面的示例.screenrc将创建 2 个选项卡并在每个选项卡中运行 3 个 echo 命令。

screen -t tab1                                                                                     
select 0                                                                                           
stuff "echo 'tab1 cmd1'; echo 'tab1 cmd2'; echo 'tab1 cmd3'^M"                                     
screen -t tab2                                                                                     
select 1                                                                                           
stuff "echo 'tab2 cmd1'; echo 'tab2 cmd2'; echo 'tab2 cmd3'^M"                                     

altscreen on                                                                                       
term screen-256color                                                                               
bind ',' prev                                                                                      
bind '.' next                                                                                      
#                                                                                                  
#change the hardstatus settings to give an window list at the bottom of the                        
#screen, with the time and date and with the current window highlighted                            
hardstatus alwayslastline                                                                          
#hardstatus string '%{= kG}%-Lw%{= kW}%50> %n%f* %t%{= kG}%+Lw%< %{= kG}%-=%c:%s%{-}'              
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m-%d %{W}%c %{g}]'

该技术利用屏幕selectstuff命令来最初选择其中一个选项卡,然后将字符串“填充”到其中。

截屏

带选项卡和命令的屏幕 ss

3. 不使用文件创建# .screenrc2

如果您正在寻找可以执行以下操作的场景:

  1. 创建屏幕会话
  2. 用选项卡加载它
  3. 让每个选项卡运行自己的命令
  4. 不需要.screenrc文件

那么这就是适合您的!不过要做好准备。使用命令行可能会有点棘手。

首先,让我们创建一个屏幕会话:

$ screen -AdmS myshell -t tab0 bash

这些开关-AdmS执行以下操作:

(参见屏幕手册页更多细节)

-A

    Adapt the sizes of all windows to the size of the  current terminal. 
    By default, screen tries to restore its old window sizes when
    attaching to resizable terminals

-d-m

    Start screen in "detached" mode. This creates a new session but
    doesn't attach to it. This is useful for system startup scripts.

-S 会话名称

    When creating a new session, this option can be used to specify a
    meaningful name for the session. This name identifies the session for
    "screen -list" and "screen -r" actions. It substitutes the default
    [tty.host] suffix.

现在让我们开始使用选项卡+它们的命令来加载它:

$ screen -S myshell -X screen -t tab1 vim
$ screen -S myshell -X screen -t tab2 ping www.google.com
$ screen -S myshell -X screen -t tab3 bash

这 3 个命令将创建 3 个附加选项卡并运行 vim、ping google 并启动 bash shell。如果我们列出屏幕会话,我们将看到以下内容:

$ screen -ls
There is a screen on:
        26642.myshell   (Detached)
1 Socket in /var/run/screen/S-root.

如果我们连接到屏幕会话,我的外壳,并列出它包含的选项卡,我们将看到以下内容:

$ screen -r myshell

按此组合键:Ctrl+A后跟Shift+"

Num Name                                                                   Flags

  0 tab0                                                                       $
  1 tab1                                                                       $
  2 tab2                                                                       $
  3 tab3                                                                       $

切换到选项卡2:

64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=443 ttl=55 time=41.4 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=444 ttl=55 time=33.0 ms
64 bytes from ord08s08-in-f20.1e100.net (74.125.225.116): icmp_seq=445 ttl=55 time=30.1 ms

截屏

从 cli 启动的屏幕 ss

上述命令是完成OP所寻求的基本方法。这当然可以使用 Bash 别名甚至 shell 脚本来压缩和完善,这只是为了演示功能并指明方向!

参考

答案2

对答案的一点补充。 stuff 首先回显命令,然后将其放在命令行上,然后如果 \n 或 ^M 结束该行则执行它。

由于回声让我烦恼,我将 \nclear\n 作为最后一个命令链接起来,因此屏幕窗口开始干净。

相关内容