从 bash 脚本启动终端时更改提示(但不影响所有终端)

从 bash 脚本启动终端时更改提示(但不影响所有终端)

我安装了两个终端,gnome-terminal并且xfce4-terminal.

我希望 xfce 终端>在启动时只显示一个简单的 as 提示。提示gnome-terminal应该保持不变(所以bashrc我认为没有修改)。

我不介意xfce-terminal从脚本或带有一些参数的另一个终端开始。

我试过:

xfce4-terminal -x export PS1='> '

但这会引发错误,并且显然是不可能的。

任何解决方案都是受欢迎的,即使它有点黑客

答案1

请更改您的.bashrc, 并测试父进程的名称。

parent_process=$(ps -o comm= -p $PPID)
parent_process=${parent_process##*/}
case "$parent_process" in
  xfce4-terminal) PS1='> ';;
esac

另一种方法是设置一个环境变量:运行PROMPT_THEME=plain xfce4-terminalPROMPT_THEME测试.bashrc.您可能想要取消设置或至少取消导出那里的变量,否则它也会在从第一个终端启动的终端中设置。

case $PROMPT_THEME in
  plain) PS1='> ';;
esac
export -n PROMPT_THEME

对于xfce4-terminal,除了第一个实例之外,这不起作用,因为后续实例只是通知正在运行的实例打开一个新窗口,因此新实例从正在运行的实例继承环境。 (是的!)您可以使用实用程序通过在终端中启动的命令来设置环境变量env

xfce4-terminal -x env PROMPT_THEME=plain bash

答案2

检查正在打开哪个终端:

 case "$TERM" in
    gnome-terminal ) PS1="[\h] \W > \[\033]0;[\u@\h] \w\007\]"
        ;;
    xfce4-terminal ) PS1="> "
        ;;
    esac

答案3

如果你~/.bashrc没有设置PROMPT_COMMAND,你可以开始xfce4-terminal

PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal

答案4

一种方法是从当前的 BASH PID(通过 $$ 获取)开始,然后获取 PPID,依此类推,直到找到哪个终端是 bash shell 的祖先。根据该信息,您可以设置 PS。

通常 shell 的父级是终端

我的系统(Debian 7)中的概念证明。

$ PARENT_PID=$(ps --pid=$$ -o ppid --no-headers)
$ ps --pid $PARENT_PID -o command --no-headers
gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL

因此,在我的系统中,只需查看 shell 的父级即可发现它是从 gnome 终端运行的。

浓缩为一行:

$ ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers
gnome-terminal -x /bin/sh -c cd '/home/XXXX/Desktop' && exec $SHELL

我尝试将此行添加到我的.bashrc

MY_TERMINAL=$(ps --pid $(ps --pid=$$ -o ppid --no-headers) -o command --no-headers | cut -f 1 -d " ")

我验证了其中MY_TERMINAL包含gnome-terminal.

所以,应该可以了。

相关内容