Strano comportamento nel Terminale con .bash_profile personalizzato


8

È difficile descrivere il comportamento, ma ecco una breve clip:

http://www.youtube.com/watch?v=9KqHBA94FPI

Fondamentalmente, quando si immettono comandi multilinea, alla fine della prima riga, il blocco di inserimento ritorna all'inizio della prima riga, scrive sulla prima riga, quindi continua normalmente sulla seconda, terza, ecc. . Durante l'eliminazione, mi consente di eliminare l'intero comando, oltre agli spazi vuoti sulla riga sopra il comando (l'ho impostato in modo che i comandi vengano inseriti dopo una riga contenente informazioni utente @ host / Directory. Quindi mi consente anche di eliminare il ultima parte della Directory e dell'host che ho descritto sopra. Mi dispiace, sono terribile nel spiegarlo, il video farà un lavoro migliore.

Ecco il contenuto del mio .bash_profile:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

Risposte:


12

Dovresti circondare i tuoi caratteri non stampabili (in questo caso, le tue sequenze di escape ANSI) con sequenze di escape bash: \[e \]. In questo modo bash saprà che i caratteri racchiusi non sono visibili, ad es. non occupano spazio, cioè. non dovrebbero essere inclusi nel calcolo della lunghezza delle parole utilizzato dal ritorno a capo.

in altre parole cambia la tua PS1definizione:

export PS1="\e[31m\u\e[0m@\e[34m\h\e[33m\w\n \$ \e[0m "

… per:

export PS1="\[\e[31m\]\u\[\e[0m\]@\[\e[34m\]\h\[\e[33m\]\w\n \$ \[\e[0m\] "

Ed ecco lo stesso PS1valore, solo per la lettura umana, con una leggibilità forse migliorata (ANSI-escape nella riga inferiore, bash escape nella parte centrale e stampa caratteri nella riga superiore).

          \u          @          \h          \w\n \$
\[      \]  \[     \] \[      \]  \[      \]        \[     \] 
  \e[31m      \e[0m     \e[34m      \e[33m            \e[0m    

Ulteriori letture:


Questo è perfetto, risolto il mio problema. Grazie mille per l'aiuto!
Blair Beck con il

Blair, benvenuto a Ask Different! Se ti piace una risposta alla tua domanda, per favore vota e accettala.
Nohillside

0

Io tutti

Ho avuto problemi simili e ho trovato una soluzione semplicemente cambiando la mia variabile PS1 da quella originale in una molto semplice, proprio il mio nome in realtà: export PS1 = Alex

Ora il mio terminale non ha più alcun comportamento strano.

Spero che ti sia d'aiuto.

Alex (su Mac Lion 10.8)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.