15

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

如果 [ -n "$WINDOW" ]; 然后
    命令
菲

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

4

5 回答 5

18

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

于 2010-08-12T22:19:26.323 回答
5

签名是正确的

查看文档

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

STY

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

于 2011-11-26T00:08:51.163 回答
4

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

更新

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

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

也不是 100% 保证

更新2

如果这两种方法都不起作用,您可以在屏幕手册中找到一些灵感

于 2010-08-12T21:45:18.983 回答
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

请注意:

当您在主机 1 的屏幕内并打开另一个与主机 2 的 SSH 会话并在那里打开屏幕时,.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 上发现这个热门。

于 2017-04-23T12:16:49.840 回答
1

检查变量 $TERM

于 2010-08-12T21:45:30.503 回答