当当前终端窗口由GNU Screen管理时,我想在.bashrc
中执行一个命令。我该怎么做?有没有相关的环境变量?我曾经使用过:
if [ -n "$WINDOW" ]; then command fi
但是据我所知,$WINDOW
可能在所有由 Screen 管理的会话中定义或未定义。
当当前终端窗口由GNU Screen管理时,我想在.bashrc
中执行一个命令。我该怎么做?有没有相关的环境变量?我曾经使用过:
if [ -n "$WINDOW" ]; then command fi
但是据我所知,$WINDOW
可能在所有由 Screen 管理的会话中定义或未定义。
检查环境变量 $STY(包含有关屏幕的信息)或 $TERM 是否为'screen'(可能不太可靠)。
$STY
方法在 sudo
脚本中运行 screen 时无法工作。 - ceztkosignine是正确的
请查看文档
http://www.gnu.org/software/screen/manual/html_node/Environment.html
STY
备用socket名称。如果调用
screen
,并且设置了环境变量STY
,则它仅在运行中的screen
会话中创建一个窗口,而不是启动新会话。
请检查$TERM
,在屏幕会话中它被设置为'screen
'(但不保证100%准确)。
更新
或者,您可以利用在屏幕中,$TERMCAP
包含屏幕子字符串的事实:
[[ $TERMCAP =~ screen ]] && echo "in screen"
也不是百分之百保证。
更新2
如果上述方法都无效,您可以在screen手册中找到灵感。
screen
会话中。只需在您的 $HOME
文件夹中添加/编辑一个名为 ~/.screenrc
的文件,并添加 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
https://www.gnu.org/software/screen/manual/html_node/Caption.html
命令:caption always|splitonly [字符串]
https://www.gnu.org/software/screen/manual/html_node/String-Escapes.html#String-Escapes
检查变量$TERM