如何检查我们是否在Linux中的screen会话中
本简要教程介绍了如何检查我们是否在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会话中。