我最近跳到了船上,zsh
正在使用“ 噢,我的Zsh”!主题blinks
。在OSX终端中看起来非常不错,但在Android Studio终端中看起来非常糟糕。
所以我的问题是,有没有办法检查此会话是否已在Android Studio中打开,而不是在OSX Terminal中打开,并zsh
据此更改主题?
java
,请切换主题。
我最近跳到了船上,zsh
正在使用“ 噢,我的Zsh”!主题blinks
。在OSX终端中看起来非常不错,但在Android Studio终端中看起来非常糟糕。
所以我的问题是,有没有办法检查此会话是否已在Android Studio中打开,而不是在OSX Terminal中打开,并zsh
据此更改主题?
java
,请切换主题。
Answers:
由于没有其他人给您答案,因此尽管拥有完全不同的软件,我仍在尝试。因此,这是如何使用任何软件进行通用回答。我想到两种方法:
打开终端,然后运行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
Linux框之间的区别(请注意:间距已更改为适合页面大小):
> 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
将是一个不错的选择(也许还有其他一些选择)。
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
获取父级的父级,等等。