Quiero que mi indicador 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ático para siempre.
¿Cómo puedo hacer que se ejecute "antes de emitir cada mensaje", como se indica en el manual?
Estoy ejecutando Mac OS X 10.9.3
echo $BASH_VERSION
3.2.51(1)-release
Se PROMPT_COMMAND
ejecuta cada vez, pero el $(...)
fragmento solo se evalúa cuando .bash_profile
se carga. Esto se debe a que las comillas dobles aún significan expandir variables y comandos.
Si usa comillas simples, el comando no se sustituye durante la ejecución de .bash_profile
, se evalúa cuando se PROMPT_COMMAND
ejecuta.
Su date
llamada se evaluó cuando la configuró, PROMPT_COMMAND
por lo que se atascó para siempre en el momento en que la 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 de 12 horas AM/PM en su aviso. Entonces:
function prompt_command() {
PS1="┏━━━[\@]━━[\t]━━━┓\n\$ "
}
export PROMPT_COMMAND=prompt_command
te daría:
┏━━━[06:17 PM]━━[18:17:57]━━━┓
$
Y mientras hablamos de personalizaciones de bash, permítanme agregar un complemento para el excelente proyecto bash-it : es un bash equivalente 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 hace que este tipo de cosas sea un poco más fácil.
sergei
sergei
PS1="[\$(date +%H:%M)] \u@\w\ $ "
. Hace que PROMPT_COMMAND sea superfluo.0942v8653
PROMPT_COMMAND
.