我安装了 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
使用pstree
和awk
是最简单的方法:
pstree -sA $$ | awk -F "---" '{ print $2 }'
解释
pstree
显示带有$$
(实际进程)的进程树。论点
pstree
:-s
:显示进程的父进程-A
:以纯 ASCII 显示输出。
该
awk
工具扫描模式并-F
使用参数来分割进程。- 最后
'{ print $2 }'
告诉awk
仅输出第二个匹配模式(在本例中为终端仿真器名称)。