我最近跳槽到zsh
并且正在使用哦我的Zsh!主题blinks
。它在 OSX 终端中看起来非常好,但在 Android Studio 终端中看起来很糟糕。
所以我的问题是有没有办法检查此会话是否已在 Android Studio 中打开,而不是在 OSX 终端中打开,并zsh
据此更改主题?
答案1
由于没有人给你答案,所以尽管有完全不同的软件,我仍在尝试。所以这是关于如何做到这一点的通用答案任何软件。我想到了两种方法:
1、环境不同
打开终端,然后运行env > env.terminal
.打开 Android Studio,然后运行env > env.studio
.现在,在任一终端中,您都可以运行diff -dby --suppress-common-lines env.terminal env.studio
(如果 Mac OS X diff 有这些选项;如果-U1
效果不够好)。
作为示例,以下是我的 Linux 机器上的xterm
和之间的区别konsole
(注意:修改间距以适应页面):
> PROFILEHOME=
> SHELL_SESSION_ID=1e8d5ab2d16641668485f991a1beffe3
> QSG_RENDER_LOOP=
> COLORTERM=truecolor
XTERM_SHELL=/bin/bash <
> KONSOLE_DBUS_SESSION=/Sessions/1
XTERM_VERSION=XTerm(327) | KONSOLE_DBUS_WINDOW=/Windows/1
TERM=xterm <
> TERM=xterm-256color
> KONSOLE_DBUS_SERVICE=:1.1514
> QMLSCENE_DEVICE=
> KONSOLE_PROFILE_NAME=Default
> COLORFGBG=15;0
WINDOWID=83886094 | WINDOWID=115343366
XAUTHORITY=/tmp/xauth-1000-_0 | XAUTHORITY=/home/anthony/.Xauthority
KDED_STARTED_BY_KDEINIT=1 <
XTERM_LOCALE=en_US.UTF-8 <
其中一些东西显然是我启动两个不同终端时产生的噪音。但其他人则不然。如果我只想要 XTerm 中的某些东西,那么if [ -n "$XTERM_VERSION" ]
似乎是一个很好的方法。同样,对于 Konsole 来说,$KONSOLE_PROFILE_NAME
这将是一个不错的选择(可能还有其他一些)。
2、父进程不同
shell 知道它自己的进程 ID,可以通过$$
. POSIX 还必须$PPID
直接获取父 PID,所以我怀疑你在 zsh 中也有这个。如果没有,ps
可以为您获取:ppid=$(ps -o ppid= $$)
。然后你可以运行命令,也可以使用 ps:
xterm:~$ ps -o args= $PPID
/usr/bin/xterm
konsole:~$ ps -o args= $PPID
/usr/bin/konsole
(你-o comm=
也可以尝试)。
在 shell 脚本中,它看起来像:
ppid=$(ps -o ppid= $$) # if you don't have PPID for some reason
if [ "$(ps -o args= $ppid)" = "/usr/bin/xterm" ]; then
echo "do xterm stuff"
fi
如果您需要进一步了解进程树,您可以使用ps
获取父级的父级等。