2010-08-12 63 views
13

只有当当前终端 窗口由GNU屏幕管理时,我才有一个命令我想在.bashrc执行。我该怎么做呢?有没有一个环境变量?我曾经有如何判断当前终端会话是否在GNU屏幕中?

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

但是,从我可以告诉,$WINDOW可能会或可能不会在所有屏幕 管理会话定义。

+0

可能重复[如何判断我是否在屏幕上?](http://stackoverflow.com/questions/5392618/how-can-i-tell-whether-im-in-a屏幕) – LopSae 2014-02-14 01:45:02

回答

17

检查环境变量$ STY一些启发(包含屏幕信息)或$ TERM是'屏幕'(可能不太可靠)。

+0

我一直在使用到目前为止使用$ TERM的货物崇拜脚本。感谢你!只是为了让它变得更糟,脚本运行的一些框具有如此旧的bash版本,以致条件限制(例如,没有部分匹配) – Jan 2013-05-11 18:08:47

4

检查$TERM,它在屏幕上会被设置为 'screen'。(但不能保证100%)

UPDATE

或者,您也可以使用,在屏幕上,$TERMCAP包含的事实屏幕串:

[[ $TERMCAP =~ screen ]] && echo "in screen" 

也不能100%保证

UPDATE2

如果两种方法都无效,你可以找到在screen manual

+0

屏幕似乎从启动终端会话继承$ TERM值。所以在我的情况下,它是xterm-256color,它取决于环境。我想要的是可以在所有环境下工作的通用解决方案。 – OTZ 2010-08-12 21:49:25

+0

@otz我很害怕这样:)更新了另一种可能性 – mykhal 2010-08-12 21:58:24

+0

$ TERMCAP方法适用于更多的情况,但错过了在同一屏幕窗口下SSH连接到其他主机的情况,在这种情况下$ TERMCAP不会包含“屏幕”子。因此,适用性与$ WINDOW完全相同,因为一旦你ssh到其他主机,它的价值也会丢失。但是所有事情都一样,$ WINDOW谓词的运行速度更快。 – OTZ 2010-08-12 22:07:10

1

检查变量$ TERM

+0

它可能会或可能不会工作,这取决于环境。 – OTZ 2010-08-12 21:51:21

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


我发现这个打here上SO。

相关问题