Altera o prompt ao iniciar um terminal a partir do script bash (mas não afeta todos os terminais)

3

Eu tenho dois terminais instalados, gnome-terminal e xfce4-terminal .

Eu gostaria de ter apenas o terminal xfce mostrando um prompt simples > as quando eu iniciá-lo. O prompt gnome-terminal deve permanecer inalterado (portanto, não é necessário alterar bashrc ).

Eu não me importo de começar xfce-terminal de um script ou outro terminal com alguns parâmetros.

Eu tentei:

xfce4-terminal -x export PS1='> '

mas isso gera um erro e aparentemente não é possível.

Qualquer solução é bem-vinda, mesmo que seja um pouco hackea

    
por Juicy 02.11.2014 / 00:36

4 respostas

1

Altere seu .bashrc e teste o nome do processo pai.

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

Outro método seria definir uma variável de ambiente: execute PROMPT_THEME=plain xfce4-terminal e teste o valor de PROMPT_THEME em seu .bashrc . Você pode querer desconfigurar ou pelo menos não exportar a variável, caso contrário, ela também será configurada em terminais iniciados a partir daquela primeira.

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

Com xfce4-terminal , isso não funcionará, exceto na primeira instância, porque as instâncias subseqüentes apenas notificam a instância em execução para abrir uma nova janela, portanto, novas instâncias herdam o ambiente da instância em execução. (Yeech!) Você pode, em vez disso, definir a variável de ambiente através do comando que você inicia no terminal, com o utilitário env .

xfce4-terminal -x env PROMPT_THEME=plain bash
    
por 02.11.2014 / 16:05
0

Verifique qual terminal está sendo aberto:

 case "$TERM" in
    gnome-terminal ) PS1="[\h] \W > \[3]0;[\u@\h] \w
 case "$TERM" in
    gnome-terminal ) PS1="[\h] \W > \[3]0;[\u@\h] \w%pre%7\]"
        ;;
    xfce4-terminal ) PS1="> "
        ;;
    esac
7\]" ;; xfce4-terminal ) PS1="> " ;; esac
    
por 02.11.2014 / 01:00
0

Se o seu ~/.bashrc não definir PROMPT_COMMAND , você poderá iniciar xfce4-terminal como:

PROMPT_COMMAND='PS1="> "; unset PROMPT_COMMAND' xfce4-terminal
    
por 03.11.2014 / 16:28
0

Uma maneira de fazer isso seria começar com o atual BASH PID (você obtém com $$) e depois obter o PPID, e assim por diante, até encontrar o terminal que é o ancestral do shell bash. Com base nessa informação, você define o PS.

Normalmente, o pai do shell será o terminal

Prova de conceito no meu sistema (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

Então, no meu sistema é o suficiente para olhar para o pai do shell para descobrir que ele está sendo executado a partir de um terminal do gnome.

Condensado em uma linha:

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

Eu tentei e adicionei esta linha ao meu .bashrc

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

E verifiquei que MY_TERMINAL contém gnome-terminal .

Então, isso deve ser feito.

    
por 02.11.2014 / 05:15