5 votes

La variable PROMPT_COMMAND du shell ne fonctionne pas comme prévu ?

Je veux que mon invite bash change en fonction des conditions externes.

Voici un extrait du manuel 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.

Dans mon .bash_profile J'ai les suivants :

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

Voici ce que je vois dans le terminal :

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

Comme vous pouvez le constater, PROMPT_COMMAND n'est pas exécuté plus d'une fois et reste statique pour toujours.

Comment puis-je faire en sorte qu'il soit exécuté "avant l'émission de chaque invite", comme indiqué dans le manuel ?

J'utilise Mac OS X 10.9.3
echo $BASH_VERSION
3.2.51(1)-release

4voto

shsteimer Points 8749

Votre date a été évalué lorsque vous avez défini PROMPT_COMMAND de sorte qu'il reste à jamais bloqué à l'heure à laquelle vous l'avez exécuté :

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

Essayez plutôt de définir une fonction et de l'affecter à PROMPT_COMMAND :

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

Vous pouvez également utiliser \@ pour obtenir l'heure actuelle au format 12 heures AM/PM dans votre invite. Ainsi :

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

Vous donnerait :

[06:17 PM][18:17:57]
$

Et puisque nous parlons de personnalisation de bash, permettez-moi de faire un petit coucou à l'excellent logiciel projet bash-it -- c'est l'équivalent en bash de oh-my-zsh et il est livré avec un grand nombre de fonctions d'aide à la création de thèmes. Vous trouverez peut-être qu'il rend ce genre de choses un peu plus facile.

3voto

0942v8653 Points 6754

Le PROMPT_COMMAND est exécutée à chaque fois, mais la fonction $(...) n'est évaluée que lorsque votre .bash_profile est chargé. En effet, les guillemets doubles permettent de continuer à développer les variables et les commandes.

Si vous utilisez des guillemets simples, la commande n'est pas remplacée pendant l'exécution de .bash_profile elle est évaluée lorsque le PROMPT_COMMAND est exécuté.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X