如何检查我们是否在Linux中的screen会话中

时间:2020-03-21 11:48:58  来源:igfitidea点击:

本简要教程介绍了如何检查我们是否在Linux中的screen会话。

正如我们可能已经注意到,当我们启动TMUX会话时,我们将显然会看到底部状态列中的会话详细信息,例如当前的Shell名称,主机名和当前日期和时间,如下图所示。

但是当我们在screen会话中时,我们就不会看到这些细节。
以下是screen会话在我的Ubuntu系统上的看起来如何:

我们看得出来差别吗?
screen会话和正常会话将完全相同。
让我们将"screen-ls"命令命令列入运行screen会话。

$screen -ls

看到了吗?我在screen会话中,但它看起来像正常的会话。
底部的状态列中没有迹象。
我们如何知道我们是否在screen会话内工作?
这就是我们现在要找到的东西。

检查我们是否在Linux中或者不在screen会话中

有几种方法可以验证我们是否在screen会话中。
在这里我有三种方法。

方法1 - 使用"echo"命令

要检查是否在screen会话中,只需运行以下命令:

$echo $STY

如果我们在screen会话中,我们将看到如下所示的输出。

18704.pts-0.theitroad

这是另一种检查我们是否在screen会话中的方法:

$echo $TERM

我们将在输出中看到术语"screen"。

示例输出:

screen.xterm-256color

如果没有运行screen会话,则我们将看到第一个命令。
对于第二个命令,输出中不会有术语"screen"。
只需退出或者分离screen会话并再次运行上述命令。
我们将看到如下所示的输出。

看?
我们不在screen上。

仅当我们在本地系统上的运行screen会话中时,上述两个命令才会工作。
如果我们在本地系统中启动screen会话,则无法使用,然后通过SSH访问网络上的其他系统。

在这种情况下,我们可以使用下面给出的第二种方法。

方法2 - 使用screen前缀键

要检查我们是否在screen会话中,只需按Ctrl + A,然后按Ctrl + T键。
如果我们在screen会话中,这将显示时间和主机名。

看看以下演示。

正如我们在上述输出中,

  • 首先,我开始一个screen会话,然后按Ctrl + A和Ctrl + T键检查我是否在screen会话中。
  • 然后通过按Ctrl + A和D从screen会话中分离。
  • 最后我重新连接到screen会话并点击Ctrl + A和Ctrl + T如果我在screen会话中,请再次检查。

如果我们是在其他某个地区的情况下,这种方法也会起作用。

方法3 - 使用Caption命令

如果我们不想每次按下键,则可以在~/.screenrc文件中添加以下代码。
如果此文件不可用,只需创建它。

$nano ~/.screenrc

添加代码:

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

保存并关闭文件。

从现在开始,每当我们启动screen会话时,都会看到终端窗口底部的小通知列(包含主机名,时间和日期,系统负载等),如下所示。

Screen session on ubuntuserver (system load: 0.00 0.00 0.00)        Sat 22.02.2017 12:37

从screen会话退出后,此通知列将消失。

方法4 - 为screen会话设置不同的BASH提示

这是通过在~/.bashrc文件中添加几行代码来轻松识别screen会话的另一种方法。
实际上这不是推荐的方法。
如果像ZSH这样的另一个shell继承我们当前的shell,它可能会导致许多不必要的问题。
这只是为了教育目的。
需要我们自担风险使用它!

首先,备份当前~/.bashrc文件:

$cp ~/.bashrc ~/.bashrc.bak

只需根据我们希望的正常和screen会话设置不同的Bash提示名称。
例如,我在我的~/.bashrc文件中添加了以下行。

if [ -z $STY ]
then
        PS1="This is normal session:~$"
else
        PS1="This is Screen session:~$"
fi

注销并登录。
当我们在正常和screen会话之间切换时,终端提示名称将根据设置而更改。

再次,更改Bash及时名称并不是一种好的做法。
相反,只需使用以前的任何一种方法来检查我们是否在screen会话中。