可以检测正在使用的终端应用程序吗?我想要实际的应用程序,而不是问题中的 TERM 环境。
我想检测 iTerm 2 / Terminal.app,以便我可以设置 OSX 特定的键盘映射,否则就是 PC。
答案1
您需要通过 SSH 转发本地环境变量,如下所述:
http://groups.google.com/group/iterm2-discuss/msg/7cc214c487d31bc8
答案2
我编写了以下脚本:
#!/bin/bash
pid=$$ # Current PID
ps -f $$ | head -n 1 # Show the header of ps
while [ $pid -gt 0 ]; do # No more parent when we reach 0 (the kernel)
ps -f $pid | tail -n +2 # ps current pid and remove header
pid=$(ps -o ppid $pid|tail -n 1) # Get parent pid
done
它获取当前 PID($$
在 bash 中)并递归获取父 PID,直到我们达到 0(即内核),ps -f
沿途打印输出(以及开始的标题,带有ps -f | head -n 1
)
我能想到的两个限制:
- 如果通过 SSH 运行,父级将是
sshd
而不是图形终端应用程序。 - 如果在单独的脚本中执行,它也会打印该脚本。
然而,您应该能够grep
输出它并在本地运行时检测其中一个父进程是否是 iTerm.app 或 Terminal.app。