我需要它来确定按ctrl + d是否会使我与服务器断开连接或只是关闭当前screen

是否可以通过某种方式检查我现在是否处于screen会话中?

#1 楼

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

我在屏幕中

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


我不在屏幕中
/>
$ echo $STY

$


评论


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

–大卫·麦金托什(David Mackintosh)
2011年4月11日,下午3:05

如果测试-n“ $ STY”;然后printf“这是一个名为'$ STY'的屏幕会话。\ n”; else printf“这不是屏幕会话。\ n”;科幻

–aggregate116​​6877
2015年9月19日于17:08

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

–womble♦
16年8月11日在8:24

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

–爱德华多·贝塞拉(Eduardo Bezerra)
16 Sep 10'在12:32

#2 楼

您可以查看$ TERM变量。

echo $TERM

如果是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当前终端会话在gnu屏幕中

评论


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

–大卫·麦金托什(David Mackintosh)
2011年4月11日,凌晨3:04

如果要在屏幕上更改TERM变量,则会招来各种麻烦。

–womble♦
16年8月11日在8:24

我的Solaris 2.6节点在将TERM值设置为屏幕值时表现不佳。

–大卫·麦金托什(David Mackintosh)
16年8月11日在17:56

与$ STY选项不同,进入sudo环境时似乎保留了“ $ TERM” =“ screen”。

–梅勒比乌斯
16 Dec 13 '10:00



#3 楼

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

评论


我们为什么不反对这一点。

– AndreKR
2014年3月6日在2:36

这是最好的解决方案吗?如果您不在屏幕上,并且^ A ^ T是您当前正在运行的程序中“ nuke your homedir”的按键序列怎么办?

–womble♦
16年8月11日在8:25

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

–垃圾
16年8月12日在8:55

@AndreKR:在脚本中不起作用

–弗兰克·默尼纳尔
19年1月19日在20:38

即时消息不赞成,因为在一个屏幕上,并筛选到另一个屏幕,我真的需要看看是否$ STY设置。由于某种原因,它重新变空了。

–布赖恩·托马斯(Brian Thomas)
19年4月23日在1:18

#4 楼

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
17年4月23日在12:22

#5 楼

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

评论


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

– jvriesem
19年4月29日在18:42

#6 楼

如果您正在查看命令行提示符,则只需键入任何内容,然后按Ctrl + A。如果光标跳到提示的开头,则说明您不在屏幕内。如果您还必须打A,那么您就是。

#7 楼

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

示例附加:

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


示例分离:

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


评论


如果在其他地方连接了屏幕,则可能是一个问题。

–丹尼斯·诺尔特
2015年4月29日在9:15

#8 楼

screen -ls


查看会话,

screen -r sessioninfo


如果断开,则重新连接到断开的连接。

screen -D -r sessioninfo


重新连接到断开连接的主机。

评论


这不能回答问题。

–womble♦
16年8月11日在8:22