Variabile della shell PROMPT_COMMAND non funziona come previsto?

4

Voglio che il mio prompt di bash cambi in base alle condizioni esterne.

Ecco un estratto dal manuale di 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.

Nel mio .bash_profile ho seguito:

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

Ecco cosa vedo nel terminale:

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

Come puoi vedere, PROMPT_COMMAND non viene eseguito più di una volta e rimane statico per sempre.

Come posso averlo eseguito "prima di emettere ogni prompt", come indicato nel manuale?

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

    
posta Sergei 28.05.2014 - 03:01
fonte

2 risposte

2

Il PROMPT_COMMAND viene eseguito ogni volta, ma lo snippet $(...) viene valutato solo quando viene caricato .bash_profile . Questo perché le virgolette doppie significano ancora espandere variabili e comandi.

Se utilizzi virgolette singole, il comando non viene sostituito durante l'esecuzione di .bash_profile , viene valutato quando viene eseguito PROMPT_COMMAND .

    
risposta data 28.05.2014 - 03:15
fonte
3

La tua date chiamata è stata valutata quando hai impostato PROMPT_COMMAND , quindi è bloccato per sempre al momento dell'esecuzione:

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

Prova a definire una funzione e assegnala a PROMPT_COMMAND:

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

Puoi anche utilizzare \@ per l'ora corrente nel formato AM / PM a 12 ore nel tuo prompt. Quindi:

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

Ti darei:

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

E mentre parliamo di personalizzazioni bash, lasciami inserire una spina per l'eccellente progetto bash-it - è un equivalente bash di oh-my-zsh e viene fornito con una serie di funzioni di supporto per la creazione del tema. Potresti scoprire che rende questo genere di cose un po 'più semplice.

    
risposta data 28.05.2014 - 03:18
fonte

Leggi altre domande sui tag