![从 bash 脚本启动终端时更改提示(但不影响所有终端)](https://linux22.com/image/58654/%E4%BB%8E%20bash%20%E8%84%9A%E6%9C%AC%E5%90%AF%E5%8A%A8%E7%BB%88%E7%AB%AF%E6%97%B6%E6%9B%B4%E6%94%B9%E6%8F%90%E7%A4%BA%EF%BC%88%E4%BD%86%E4%B8%8D%E5%BD%B1%E5%93%8D%E6%89%80%E6%9C%89%E7%BB%88%E7%AB%AF%EF%BC%89.png)
我安装了两个终端,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-terminal
并PROMPT_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
.
所以,应该可以了。