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

wlk*_*wlk 101 console gnu-screen

我需要它来确定点击ctrl+d是否会断开我与服务器的连接或只是关闭 current screen

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

use*_*517 136

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

我在银幕

$ echo $STY 
29624.pts-1.iain-10-04
$
Run Code Online (Sandbox Code Playgroud)

我不在荧幕

$ echo $STY

$
Run Code Online (Sandbox Code Playgroud)

  • 这假定您仍在本地计算机上的正在运行的会话中。如果您在其他地方启动 screen 然后 SSH,这将不起作用。 (13认同)
  • @DavidMackintosh 如果您通过 SSH 连接到其他地方,按 ctrl-D 将“断开我与服务器的连接”,这正是问题所要问的。 (3认同)
  • `if test -n "$STY"; 然后 printf "这是一个名为 '$STY' 的屏幕会话。\n"; else printf "这不是屏幕会话。\n"; 菲` (2认同)

eww*_*ite 50

您可以查看 $TERM 变量。

echo $TERM

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

root@deore:/volumes# echo $TERM
screen
Run Code Online (Sandbox Code Playgroud)

Ctrl-a -d(退出屏幕)

root@deore:/volumes# echo $TERM
xterm
Run Code Online (Sandbox Code Playgroud)

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

  • 这假定您没有出于某种原因故意弄乱您的 TERM 值。 (4认同)
  • `"$TERM" = "screen"` 似乎在进入 `sudo` 环境时被保留,与 `$STY` 选项不同。 (3认同)

Gur*_*geh 34

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

  • 为什么我们不赞成这个。 (4认同)
  • @womble 如果您在一个未知程序中,它可能会做随机破坏性的事情作为对关键序列和命令的响应,那么没有什么是安全的。 (2认同)
  • @AndreKR:它在脚本中不起作用 (2认同)

小智 22

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

我个人使用这个:

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

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

Screen session on gbook (system load: 1,75 1,74 1,68)                   Lun 05.01.2015 13:01
Run Code Online (Sandbox Code Playgroud)

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

  • 太棒了!它不会妨碍(底部位置),它始终可见(和着色)并提供有关系统的有用信息。我也在这里发布了这个 http://stackoverflow.com/a/43571028/2450431 (2认同)

wlk*_*wlk 7

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