如何检查当前正在使用哪个终端仿真器?

如何检查当前正在使用哪个终端仿真器?

我安装了 gnome-terminal 和 Guake。我想在这些终端仿真器启动时显示不同的启动消息。我应该在 .bashrc 中写入什么代码才能实现这一点?

答案1

您可以通过 grepping 父进程名称来获取终端仿真器名称。因此它适用于每个终端仿真器。

在 bash、zsh 等中:

basename "/"$(ps -o cmd -f -p $(cat /proc/$(echo $$)/stat | cut -d \  -f 4) | tail -1 | sed 's/ .*$//')

带鱼壳:

basename "/"(ps -o cmd -f -p (cat /proc/(echo %self)/stat | cut -d \  -f 4) | tail -1 | sed 's/ .*$//')

答案2

尝试这个:

echo $TERM

这更权威,但可能会被你的程序弄乱。但是在我的程序上,它显示xterm,在 ttys 上显示linux,我认为这代表 Linux 控制台。

答案3

该函数应该完成以下工作:

container() {
    pid=$$
    while true; do
        pid=$(ps -h -o ppid -p $pid 2>/dev/null)
        case $(ps -h -o comm -p $pid 2>/dev/null) in
        (gnome-terminal) echo "Running in gnome terminal";return;;
        (xterm) echo "Running in xterm";return;;
        (rxvt) echo "Running in rxvt";return;;
        (python) if [ ! -z "$(ps -h -o args -p $pid 2>/dev/null | grep guake)" ]; then echo "Running in Guake"; return; fi ;;
        esac
        [[ $(echo $pid) == 1 ]] && break
    done
}
container

答案4

使用pstreeawk是最简单的方法:

pstree -sA $$ | awk -F "---" '{ print $2 }'

解释

  1. pstree显示带有$$(实际进程)的进程树。
  2. 论点pstree

    • -s:显示进程的父进程
    • -A:以纯 ASCII 显示输出。
  3. awk工具扫描模式并-F使用参数来分割进程。

  4. 最后'{ print $2 }'告诉awk仅输出第二个匹配模式(在本例中为终端仿真器名称)。

相关内容