如何为屏幕指定名称?

520

我在命令行使用Screen多路复用工具并打开了很多窗口。然后我会忘记哪个进程ID与哪个任务相关联。

我想为一个窗口设置一个名称,但我在man页面中找不到这个选项。

目前,列出所有窗口的方式如下:

There are screens on:
    5422.pts-1.aws1 (Detached)
    5448.pts-1.aws1 (Detached)
    5027.pts-1.aws1 (Detached)
3 Sockets in /var/run/screen/S-sb.

我想看到这样的情况:

There are screens on:
    5422.logCleanWorker (Detached)
    5448.overNightLongTask(Detached)
    5027.databaseOverNightLongTask (Detached)
3 Sockets in /var/run/screen/S-sb.

如何做到这一点?


6
这个问题似乎更像是在询问“如何重命名现有会话”,而不是“如何启动带名称的新会话”。在这种情况下,目前选择的答案并不是很合适。正确的答案应该是由user164176提供的答案 - https://dev59.com/inA75IYBdhLWcg3wm6ax#3309696。 - Rakib
你的屏幕会话名称表明你每个任务(也许是单个命令)创建一个新的屏幕会话。Screen支持多窗口,因此你可以在单个屏幕会话中运行所有这些任务。 - Melebius
3
能否将此迁移到SuperUser(或其他StackExchange网站)?显然,这对很多人非常有用,尽管它超出了该特定网站的范围。 - Patrick Sanan
1
如果您在此网站上找到了一个选项,可以将其移动到那里并保留所有历史记录,那么我同意将其移动。 - spankmaster79
5个回答

769

开始一个新的会话

screen -S 你的会话名称

重命名现有的会话

Ctrl+a, : sessionname 你的会话名称 Enter

你必须在会话内部执行此操作。


21
这是一个恰当的解决方案,因为它着重于对现有会话进行重命名而不是创建新会话。 - thanos.a
5
关于 C-a : 语法的简要说明... "所有的 screen 命令都以转义键为前缀,默认情况下是 C-a(这表示 Control-a,有时写作 ^a)。要向 screen 中的程序发送字面意义上的 C-a,请使用 C-a a。当在 screen 中使用嵌套 screen 时,这是很有用的。例如,C-a a n 将在 screen 内的新窗口中移动 screen。" (参考资料:http://aperiodic.net/screen/quick_reference) - Nate Ritter
非常感谢。虽然我知道你可以从名称开始,但我经常不命名就开始编程,然后希望以后能够命名。谢谢! - Ketzak
2
在几年后再看一下,同意 :D - spankmaster79
我能把 C-a :sessionname NEWNAME 绑定到更快捷的键位上吗?我尝试了 bind $ sessionname,但现在当我按下 C-a $ 时它不会提示我输入新名称。这有可能实现吗? - andreas-h
1
专业提示:您可以键入屏幕名称的前缀,因此不必输入完整的名称。例如,screen -r my 将会生效(如果这是唯一的前缀)。 - gub

601

要创建一个名为foo的新屏幕,使用如下代码:

screen -S foo

然后,要重新连接它,请运行:

screen -r foo  # or use -x, as in
screen -x foo  # for "Multi display mode" (see the man page)

18
在你的解决方案中,你解释了如何创建具有正确名称的新项目,而不是更改现有项目。如果可以保持会话,就没有人想要终止它。 - thanos.a
11
请向下滑动查看用户164176的回答,了解如何重命名现有会话。 - jlh
1
问题看起来更像在询问“如何重命名现有会话”,而不是“如何启动具有名称的新会话”。 在这种情况下,当前选择的答案并不是真正合适的。 应该选择正确的答案是由user164176给出的 - https://dev59.com/inA75IYBdhLWcg3wm6ax#3309696 - Rakib
我在谷歌上搜索了“ubuntu创建一个带名称的新屏幕”,这是第一个结果。正是我所需要的 :) 谢谢 - Skylord123
1
重命名会话:按Ctrl+a,输入“:sessionname YOUR_SESSION_NAME”并按Enter键。 - Slake

54

如前所述,screen -S SESSIONTITLE 用于以标题(SESSIONTITLE)启动会话,但如果您启动了一个会话并且后来决定更改其标题,则可以使用默认键绑定来完成:

Ctrl+aA

这会提示:

Set windows title to:SESSIONTITLE

通过退格并输入所需的标题更改SESSIONTITLE。要确认名称更改并列出所有标题。

Ctrl+a"


44
你把“会话”和“窗口”这两个术语视为可以互换使用,但它们实际上是不同的。键入“Ctrl+a”,然后再按“A”并不能设置“会话名称”(SESSIONNAME),它只是设置了当前“窗口”的标题。在一个会话中的窗口标题在用“screen -list”查询会话列表时不会显示出来。问题是如何设置“会话名称”。 - StvnW
6
有用,但它会更改当前窗口标题,而不是会话名称。 - Znik

17

最简单的方法是使用带名称的 Screen:

screen -S 'name' 'application'
  • Ctrl + a, d = 退出但保持应用程序打开

返回到屏幕:

screen -r 'name'
例如,使用Lynx和Screen。
创建一个screen:
screen -S lynx lynx

Ctrl+a, d = 退出

稍后可以通过以下方式返回:

screen -r lynx

21
这有三个问题。首先,已经有几个人发布了这个。其次,你告诉他一些他已经知道的基本屏幕使用方法。第三,你实际上没有回答这个问题,因为他问如何命名一个已经存在的屏幕会话。 - Steely Dan

0

我是一个Screen的初学者,但我发现在恢复丢失的连接时它非常有用。

你的问题已经得到了解答,但这些信息可能作为补充 - 我使用PuTTY与PuTTY连接管理器,并命名我的屏幕 - "tab1","tab2"等 - 对我来说,8-10个选项卡的整体图像比每个单独的选项卡名称更重要。我使用第8个选项卡连接到数据库,第7个选项卡查看日志等。因此,当我想重新附加我的屏幕时,我编写了一个简单的包装器,其中包含以下内容:

#!/bin/bash
screen -d -r tab$1

第一个参数是选项卡的编号。


2
这可能最好作为一个Bash函数完成。 - Paul Price

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接