.bashrc
只有当当前终端窗口由 GNU 屏幕管理时,我才想执行一个命令。我该怎么做呢?它有环境变量吗?我曾经有
如果 [ -n "$WINDOW" ]; 然后 命令 菲
但据我所知,$WINDOW
可能会或可能不会在所有屏幕管理会话中定义。
.bashrc
只有当当前终端窗口由 GNU 屏幕管理时,我才想执行一个命令。我该怎么做呢?它有环境变量吗?我曾经有
如果 [ -n "$WINDOW" ]; 然后 命令 菲
但据我所知,$WINDOW
可能会或可能不会在所有屏幕管理会话中定义。
检查环境变量 $STY(包含有关屏幕的信息)或 $TERM 是否为“屏幕”(可能不太可靠)。
签名是正确的
查看文档
http://www.gnu.org/software/screen/manual/html_node/Environment.html
STY
备用套接字名称。如果
screen
被调用,并且STY
设置了环境变量,那么它只会在正在运行的screen
会话中创建一个窗口,而不是启动一个新的会话。
检查$TERM
,它screen
在屏幕会话中设置为“”..(但不是 100% 保证)
更新
$TERMCAP
或者,您可以利用屏幕中包含屏幕子字符串的事实:
[[ $TERMCAP =~ screen ]] && echo "in screen"
也不是 100% 保证
更新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 上发现了这个热门。
检查变量 $TERM