Il terminale richiede di "salvare" determinati comandi sulla freccia rivolta verso l'alto

5

Ho aggiunto un po 'di script di shell al mio prompt per divertimento. Alternanza casuale dei colori degli elementi prompt. L'ho fatto solo perché uno schermo grigio diventa noioso dopo un po '. Quello che segue è il mio prompt in .bash-profile:

function next_hue
{
    color1=$((31 + (++color % 7)))   # set 31 to 30 for dark on light
    color1=$((31 + (++color % 7)))
    PS1="\n\e[0:${color}m[\W]\n\e[0:${color}m[\u]-> $reset" # set 1 to 0 for     dark on light
}

Questo alterna il colore del mio prompt. Yay!

Il problema è che a volte la shell si "blocca". Ad esempio, la shell di solito è così:

directory
[username]->

Se ho recentemente eseguito il comando docker run e ho fatto scorrere la freccia verso l'alto nella cronologia, 'run docker si blocca e finisco con questo:

directory
[username]->docker run

Se aggiungo un nuovo comando si impila su docker run :

directory
[username]->docker runcd /some/path

Devo usare ctrl-c o qualche altra opzione simile, e non posso più usare il comando docker-run a meno che non scriva tutto. Che cosa potrebbe causare questo errore? Ho esaminato un po 'il mio prompt e penso che sia tutto a posto, ma è stato difficile capire in primo luogo.

    
posta user148621 26.09.2015 - 02:22
fonte

1 risposta

2

Non stai sfuggendo ai caratteri non stampabili nel tuo prompt. Vedi questo articolo e usa " \[ " e " \] " intorno ai colori, qualcosa come questo (non testato ) ad esempio ...

PS1="\n\e[0:\[${color}\]m[\W]\n\e[0:\[${color}\]m[\u]-> $reset"

Potrebbe essere necessario verificarlo. Come ho detto, non è stato verificato, quindi ho inserito un " \] " nel mezzo di un codice colore. Per il mio prompt faccio l'escape quando inizializzo le variabili di colore:

PS1_FG="\[$(tput setaf 223)\]"  # Prompt foreground colour (223 = pale orange/brown)

Per quello che vale, ti consiglio vivamente di utilizzare tput quando hai a che fare con i codici di controllo. Rende gli script più portabili e (IMHO) è più facile da leggere.

    
risposta data 08.12.2016 - 11:32
fonte

Leggi altre domande sui tag