只有当当前终端 窗口由GNU屏幕管理时,我才有一个命令我想在.bashrc
执行。我该怎么做呢?有没有一个环境变量?我曾经有如何判断当前终端会话是否在GNU屏幕中?
if [ -n "$WINDOW" ]; then command fi
但是,从我可以告诉,$WINDOW
可能会或可能不会在所有屏幕 管理会话定义。
只有当当前终端 窗口由GNU屏幕管理时,我才有一个命令我想在.bashrc
执行。我该怎么做呢?有没有一个环境变量?我曾经有如何判断当前终端会话是否在GNU屏幕中?
if [ -n "$WINDOW" ]; then command fi
但是,从我可以告诉,$WINDOW
可能会或可能不会在所有屏幕 管理会话定义。
检查环境变量$ STY一些启发(包含屏幕信息)或$ TERM是'屏幕'(可能不太可靠)。
我一直在使用到目前为止使用$ TERM的货物崇拜脚本。感谢你!只是为了让它变得更糟,脚本运行的一些框具有如此旧的bash版本,以致条件限制(例如,没有部分匹配) – Jan 2013-05-11 18:08:47
检查$TERM
,它在屏幕上会被设置为 'screen
'。(但不能保证100%)
UPDATE
或者,您也可以使用,在屏幕上,$TERMCAP
包含的事实屏幕串:
[[ $TERMCAP =~ screen ]] && echo "in screen"
也不能100%保证
UPDATE2
如果两种方法都无效,你可以找到在screen manual
屏幕似乎从启动终端会话继承$ TERM值。所以在我的情况下,它是xterm-256color,它取决于环境。我想要的是可以在所有环境下工作的通用解决方案。 – OTZ 2010-08-12 21:49:25
@otz我很害怕这样:)更新了另一种可能性 – mykhal 2010-08-12 21:58:24
$ TERMCAP方法适用于更多的情况,但错过了在同一屏幕窗口下SSH连接到其他主机的情况,在这种情况下$ TERMCAP不会包含“屏幕”子。因此,适用性与$ WINDOW完全相同,因为一旦你ssh到其他主机,它的价值也会丢失。但是所有事情都一样,$ WINDOW谓词的运行速度更快。 – OTZ 2010-08-12 22:07:10
signine是正确的
看到该文档
http://www.gnu.org/software/screen/manual/html_node/Environment.html
STY
备用插座名称。如果调用
screen
,并且设置了环境变量STY
,那么它将在运行的screen
会话中仅创建一个窗口,而不是启动新的会话。
我想建议一个总是可见的替代解决方案,并且不需要检查就知道你在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。
可能重复[如何判断我是否在屏幕上?](http://stackoverflow.com/questions/5392618/how-can-i-tell-whether-im-in-a屏幕) – LopSae 2014-02-14 01:45:02