如何检查我是否在屏幕会话中?


75

是否可以通过某种方式检查我现在是否在屏幕会话中?我需要它来确定是否按ctrl + d会使我与服务器断开连接或只是关闭当前屏幕。谢谢。

Answers:


106

您可以查看$STY变量(由screen命令设置的变量)。如果不是“”,那么您正在进行屏幕会话。

我在屏幕上

$ echo $STY 
29624.pts-1.iain-10-04
$

我不在屏幕上

$ echo $STY

$

12
这假定您仍在本地计算机上正在运行的会话中。如果启动屏幕,然后在其他地方使用SSH,则此操作将无效。
David Mackintosh

2
if test -n "$STY"; then printf "This is a screen session named '$STY'.\n"; else printf "This is NOT a screen session.\n"; fi
aggregate116​​6877

2
@DavidMackintosh如果您通过SSH进入其他地方,则按ctrl-D将“使我与服务器断开连接”,这正是问题所在。
womble

1
@ aggregate116​​6877如果您在我现在使用的每台机器上以别名形式发布,则我有此提示。
Eduardo Bezerra

44

您可以查看$ TERM变量。

echo $TERM

如果是screen会话,则术语变量应返回“ screen”。

root@deore:/volumes# echo $TERM
screen

Ctrl-a -d(退出屏幕)

root@deore:/volumes# echo $TERM
xterm

另请检查:https : //stackoverflow.com/questions/3472287/how-do-you-tell-if-the-current-terminal-session-is-in-gnu-screen


4
这假定您出于某种原因没有故意弄乱您的TERM值。
David Mackintosh

1
如果要在屏幕上更改TERM变量,则会给自己造成各种麻烦。
womble

好吧,我的Solaris 2.6节点在将TERM值设置为screen值时表现不佳。
大卫·麦金托什

3
"$TERM" = "screen"sudo$STY选项不同,进入环境时似乎被保留了。
Melebius

29

除非您更改了默认键绑定,否则您可以执行Ctrl+ a-> Ctrl+ t,如果您在屏幕上,它将显示时间。即使您将ssh:d移到其他地方,这也将起作用,这与其他建议不同。


4
我们为什么不反对这一点。
AndreKR 2014年

这绝对是这里最好的解决方案。
菲利克斯·詹

2
@womble如果您在一个未知程序中,可能会对键序列和命令做出随机破坏性的操作,那么没有什么是安全的。
Gurgeh'8

2
@AndreKR:在脚本中不起作用
Frank Meulenaar

1
即时通讯不赞成,因为在一个屏幕上,并筛选到另一个屏幕,我确实需要查看$ STY是否设置。由于某种原因,它重新变空了。
Brian Thomas

14

中的caption命令~/.screenrc是区分屏幕会话的好方法。

我个人使用的是:

$ cat ~/.screenrc
caption always "%{= kc}Screen session on %H (system load: %l)%-28=%{= .m}%D %d.%m.%Y %0c"

它在屏幕底部添加了这样的一行:

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01

第一部分(系统名称+负载)为绿色,日期为粉红色。有用且不容错过!


太棒了!它不会妨碍您(底部位置),始终可见(并带有颜色),并提供有关系统的有用信息。我也在这里发布了stackoverflow.com/a/43571028/2450431
hrvoj3e

6

我找到了另一个解决方案:
修改您的.screenrc,使我的屏幕会话看起来与普通终端完全不同。


我想我知道您的建议,并且在某些情况下可以完全避免此问题。如果通过显示(例如)示例.screenrc文件来描述您的意思,则可能会更有帮助。
jvriesem

0
screen -ls

查看您的会话和

screen -r sessioninfo

重新连接到断开的连接(如果已断开连接)。

screen -D -r sessioninfo

重新连接到断开连接的服务器。


1
这不能回答问题。
womble

-1

做一个screen -ls。它会明确指出AttachedDetached状态。

附带示例:

$ screen -ls | grep tached
3132.pts-0.esavo00      (Attached)

分离的示例:

$ screen -ls |grep tached
3132.pts-0.esavo00  (Detached)

6
如果其他地方有屏幕连接,则可能是一个问题。
丹尼斯·诺尔特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.