$ PROMPT_COMMAND é uma lista separada por dois pontos?

1

Eu quero permitir que meu histórico de comandos em todas as abas e janelas do terminal seja gravado em .bash_history, definindo PROMPT_COMMAND em .profile:

  1. export PROMPT_COMMAND="history -a; history -c; history -r;$PROMPT_COMMAND"

No entanto, quando verifico se esta variável de ambiente já está definida, obtenho:

echo $PROMPT_COMMAND
printf "3]0;%s@%s:%s
echo $PROMPT_COMMAND
printf "3]0;%s@%s:%s%pre%7" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"
7" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/\~}"

A exportação de PROMPT_COMMAND assim substituirá a minha lista $ PROMPT_COMMAND existente ou será necessário prefixar o valor de PROMPT_COMMAND com um : antes de exportá-lo?

    
por MyWrathAcademia 05.08.2018 / 15:43

1 resposta

1

Is $PROMPT_COMMAND a colon separated list?

Isso é fácil de testar:

$ PROMPT_COMMAND='true:true' bash 
bash: true:true: command not found
$ exit

Então, a resposta é "não".

Mas você poderia tomar isso como uma sequência separada de ponto-e-vírgula de comandos, como qualquer outra linha de código shell:

$ PROMPT_COMMAND='echo x;echo y' bash 
x
y
$ exit

Isso é o que a atribuição da sua pergunta tem: vários comandos, separados por ponto e vírgula, com o valor anterior de PROMPT_COMMAND colado ao fim.

É claro que outra maneira de executar vários comandos a partir de PROMPT_COMMAND seria fazer uma função e chamá-la de lá.

Dito isto, a sequência printf no seu PROMPT_COMMAND parece algo que pode ser melhor colocado no prompt real, por dois motivos. Primeiro, ele não termina em uma nova linha, então pode atrapalhar a idéia de Bash de onde o cursor está, assim como outros comandos que geram linhas incompletas antes de sair. Segundo, se você tiver o shell reimprimir o prompt, por meio da conclusão da tabulação, PS1 será exibido novamente, mas PROMPT_COMMAND não será executado novamente.

    
por 05.08.2018 / 15:52