La variable de shell PROMPT_COMMAND no funciona como se esperaba.

4

Quiero que mi mensaje de bash cambie según las condiciones externas.

Aquí hay un extracto del manual de bash:

PROMPT_COMMAND: If set, the value is executed as a command prior to issuing each primary prompt.

PS1: The value of this parameter is expanded (see PROMPTING below) and used as the primary prompt string.

En mi .bash_profile tengo lo siguiente:

export PROMPT_COMMAND="echo -n ┏━━━[$(date +%H:%M)]"
export PS1="━━[\t]━━━┓\n\$ "

Esto es lo que veo en la terminal:

┏━━━[03:46]━━[03:46:52]━━━┓
$ cd ..
┏━━━[03:46]━━[03:51:37]━━━┓
$

Como puede ver, PROMPT_COMMAND no se ejecuta más de una vez y permanece estática para siempre.

¿Cómo puedo hacer que se ejecute "antes de emitir cada solicitud", como se indica en el manual?

Estoy ejecutando Mac OS X 10.9.3
echo $BASH_VERSION
3.2.51(1)-release

    
pregunta Sergei 28.05.2014 - 03:01

2 respuestas

2

El PROMPT_COMMAND se ejecuta cada vez, pero el fragmento de código $(...) solo se evalúa cuando se carga el .bash_profile . Esto se debe a que las comillas dobles significan que aún se expanden las variables y los comandos.

Si usa comillas simples, el comando no se sustituye durante la ejecución de .bash_profile , se evalúa cuando se ejecuta PROMPT_COMMAND .

    
respondido por el 0942v8653 28.05.2014 - 03:15
3

Su llamada date se evaluó cuando configuró PROMPT_COMMAND para que se atasque para siempre en el momento en que ejecutó:

export PROMPT_COMMAND="echo -n ┏━━━[$(date +%H:%M)]"

Intente definir una función en su lugar y asignarla a PROMPT_COMMAND:

function prompt_command() {
    PS1="┏━━━[$(date +%H:%M)]━━[\t]━━━┓\n\$ "
}
export PROMPT_COMMAND=prompt_command

También puede usar \@ para la hora actual en formato AM / PM de 12 horas en su indicador. Entonces:

function prompt_command() {
    PS1="┏━━━[\@]━━[\t]━━━┓\n\$ "
}
export PROMPT_COMMAND=prompt_command

Te daría:

┏━━━[06:17 PM]━━[18:17:57]━━━┓
$

Y mientras estamos hablando de personalizaciones de bash, permítame ponerle un complemento al excelente proyecto de bash-it - es un equivalente de bash a oh-my-zsh y viene con un montón de funciones de ayuda para la creación de temas. Es posible que encuentre que esto facilita un poco más este tipo.

    
respondido por el Ian C. 28.05.2014 - 03:18

Lea otras preguntas en las etiquetas