5 votos

La variable Shell PROMPT_COMMAND no funciona como es debido?

Quiero que mi prompt de bash cambie dependiendo de 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 el terminal:

[03:46][03:46:52]
$ cd ..
[03:46][03:51:37]
$

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

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

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

4voto

shsteimer Puntos 8749

Su date se evaluó cuando se estableció PROMPT_COMMAND por lo que se queda atascado para siempre en el momento en que se 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 utilizar \@ para la hora actual en formato de 12 horas AM/PM en su indicador. Así:

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

Te daría:

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

Y ya que estamos hablando de personalizaciones de bash, permítanme que les recomiende el excelente proyecto bash-it -- es el equivalente en bash a oh-my-zsh y viene con un montón de funciones de ayuda para la creación de temas. Puede que encuentres que hace este tipo de cosas un poco más fácil.

3voto

0942v8653 Puntos 3617

El PROMPT_COMMAND se ejecuta cada vez, pero el $(...) sólo se evalúa cuando su .bash_profile está cargado. Esto se debe a que las comillas dobles significan seguir expandiendo las variables y los comandos.

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

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X