如何判断当前终端会话是否在GNU屏幕中?

时间:2010-08-12 21:41:28

标签: bash terminal gnu gnu-screen

我有一个命令我想在.bashrc只在当前终端时执行 窗口由GNU屏幕管理。我该怎么做呢?它有环境变量吗?我曾经有过

if [ -n "$WINDOW" ]; then
    command
fi

但据我所知,$WINDOW可能会或可能不会在所有屏幕上定义 管理会议。

5 个答案:

答案 0 :(得分:18)

检查环境变量$ STY(包含有关屏幕的信息)或$ TERM为'screen'(可能不太可靠)。

答案 1 :(得分:5)

signine是正确的

参见文档

http://www.gnu.org/software/screen/manual/html_node/Environment.html

  

STY

     

备用套接字名称。如果调用了screen,并且设置了环境变量STY,那么它只会在正在运行的screen会话中创建一个窗口而不是启动新会话。

答案 2 :(得分:4)

勾选$TERM,在屏幕会话中设置为“screen”..(但不是100%保证)

<强>更新

或者,您可以利用屏幕中$TERMCAP包含屏幕子字符串:

这一事实
[[ $TERMCAP =~ screen ]] && echo "in screen"

也不是100%保证

<强> UPDATE2

如果两种方法都不起作用,您可以在screen manual

中找到一些灵感

答案 3 :(得分:2)

我想建议一个始终可见的替代解决方案,不需要检查是否知道您在screen会话中。

只需在~/.screenrc文件夹中添加/编辑文件$HOME,然后添加caption命令:

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

你会看到一条始终可见并着色的最底线。

Screen session on host (system load: 1.50 1.40 1.30)        2017-04-23 14:06

请注意:

  

当你在host1的屏幕内并打开另一个SSH会话到host2并打开那里也有.screenrc的屏幕时,你会得到两条从底部向上堆叠的线(就像一个包装器)。

     

在这种情况下,这非常有用!

     

Screen session on host2 (system load: 0.01 0.03 0.05) 2017-04-23 14:14   Screen session on host1 (system load: 0.00 0.00 0.00) 2017-04-23 14:14

其他信息:

  

https://www.gnu.org/software/screen/manual/html_node/Caption.html

     
    

Command: caption always|splitonly [string]

  
     

https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes

  

我在SO上找到了这个here

答案 4 :(得分:1)

检查变量$ TERM