为屏幕会话设置名称

wel*_*lly 98 gnu-screen

有没有办法为 unix 屏幕会话指定一个特定的名称?例如,假设我多次运行同一个程序,每个程序都有不同的参数,我想知道哪个是哪个。

小智 126

您可以在使用该-S name选项启动会话时为其命名。从正在运行的屏幕中,您可以通过键入来更改它

Ctrl+ A:然后是(1)sessionname name

您可以查看正在运行的屏幕会话screen -ls,并通过名称连接到一个

屏幕 -xS名称

(1): nameis 和将成为新会话名称的任意字符串。如果会话名称包含空格,请用单引号或双引号将其引用。

在单个屏幕会话中,您还可以命名每个窗口。通过输入Ctrl+ AA然后输入您想要的名称来执行此操作。您可以通过键入Ctrl+ A、来查看命名窗口的交互式列表",然后从该列表中选择要切换到的窗口。

命名屏幕和屏幕中的终端对于记住它们是什么以及你为什么首先启动它们非常有帮助。

  • 在开始后重命名屏幕会话是可能的(使用`:sessionname NEWNAME`),但“通常不鼓励”。`$STY` 环境变量仍然引用原始名称。请参阅“屏幕”手册:https://www.gnu.org/software/screen/manual/html_node/Session-Name.html (6认同)

Gil*_*il' 32

这里有两个概念,我不确定您想到的是哪一个:

  • 您可以有多个屏幕窗口。每个窗口都运行一个 shell 或其他程序。所有的窗口都由同一个进程托管。C-a c创建一个窗口,C-a nC-a p切换到下一个/上一个窗口,依此类推。
  • 您可以有多个屏幕会话。每个会话都由其自己的进程托管,并且独立于所有其他会话。没有任何重新附加(-r-R)选项的启动屏幕会创建一个新会话。

Windows 有标题,可以通过-t命令行选项、C-a A键绑定、title命令或\ek转义序列设置标题。有关更多详细信息,请参阅shellter 的回答

会话可以有名称。您通常会在命令行上使用-S选项设置名称;如果您不指定名称,则 screen 会补一个。如果您使用多个屏幕会话,您通常会给它们不同的会话名称。您可以列出正在运行的屏幕会话screen -ls;每个会话行的第一个字是12345.sessionname12345 是屏幕进程 ID。使用screen -r sessionnamescreen -r 12345恢复通过其名称或进程 ID 指示的会话。


aex*_*exl 22

开始:

screen -S mysession
Run Code Online (Sandbox Code Playgroud)

恢复:

screen -r mysession
Run Code Online (Sandbox Code Playgroud)

信用

  • 这是更简单直接的答案。 (2认同)

she*_*ter 16

啊...屏幕,它带我回来;-)

对于一个窗口

-t name
    sets the title (a.k.a.) for the default shell or specified program. 
    See also the "shelltitle" .screenrc command.
Run Code Online (Sandbox Code Playgroud)

对于从您的 .screenrc 开始的多个会话

screen -t top 2 nice top
screen -t ....
Run Code Online (Sandbox Code Playgroud)

这是一份在线副本的链接 screen页。

编辑:添加

要更改当前屏幕名称,请制作一个 shell 脚本工具,例如

cat scrnTitle.sh
#/bin/bash
echo -ne '\ek${0}\e\\'
Run Code Online (Sandbox Code Playgroud)

未经测试,我正在使用的系统上没有可用的屏幕。

编辑 2 (2021-03-02)

正如@MrFooz 正确指出的那样,在$0单引号内时不会扩展,正确的代码是

cat scrnTitle.sh
#/bin/bash
echo -ne "\ek${0}\e\\"
Run Code Online (Sandbox Code Playgroud)

  • Nit:需要双引号而不是单引号,以便发生 `${0}` 替换:`echo -ne "\ek${0}\e\\"`。 (2认同)

nin*_*alj 5

运行时screen

Ctrl+a(或任何您的screen转义序列)A


小智 5

上面的答案已经告诉您如何在启动屏幕时为其命名。他们还指出,屏幕启动后无法重命名。可以设置窗口标题,但用于附加到屏幕的名称仍然是 pid.pty.host。

然而,为了达到有用的效果,我发现使用别名效果非常好。如果我忘记命名一个屏幕,或者发现自己处于一个会话中,有一堆屏幕自然而然地成为特定任务的屏幕,我只需为附加到它们的命令设置一个别名即可。

例子:

alias goncompile='screen -r 2354'
Run Code Online (Sandbox Code Playgroud)

单独发出别名命令会提醒您有哪些屏幕以及已设置附加到它们的命令。

用于unalias删除它们。