web-dev-qa-db-fra.com

Le texte OS X Terminal s'empile sur lui-même

Je rencontre un problème étrange dans l'application Terminal sous Mac OS X Lion. Lorsque j'entre dans une longue ligne de texte qui doit être renvoyée à la ligne suivante lorsqu'elle atteint la fenêtre Edge of the Terminal, il continue à taper en haut du texte à partir de la ligne située au-dessus de celle-ci.

Voici quelques captures d'écran pour illustrer le problème:

Avant que mon texte n'atteigne la fenêtre Bord:

before

Après que le texte ait atteint la fenêtre Bord:

after

J'ai également fourni des captures d'écran de mes paramètres de texte et de fenêtre au cas où ceux-ci pourraient être utiles.

Paramètres du texte:

text

Paramètres de la fenêtre:

window

Merci d'avance pour toute aide offerte. J'ai ce problème depuis un moment et je ne l'ai jamais fait. Cela devient vraiment vraiment pénible quand j'entre dans des choses qui nécessitent de grosses commandes grep et de longs noms de chemins.

41
Daryn

La variable d'environnement PS1 détermine l'apparence de l'invite de Shell. man bash donne une documentation complète à ce sujet. (Il y en a plusieurs, pour différents modes).

Il y a un certain nombre de fichiers qui peuvent le configurer, généralement l'un des ~/.profile, ~/.bashrc, /etc/profile ou /etc/bashrc.

Si vous allez avoir des codes de couleur ou d’autres séquences de contrôle à l'intérieur, vous devez les envelopper avec \[ et \] correctement (et PAS en enveloppant le texte normal), sinon la modification de ligne pourrait être gâchée comme dans votre cas. Je suggère de réinitialiser PS1 à la valeur par défaut, puis d’ajouter avec précaution la coloration, élément par élément.

Par exemple:

PS1='\[\033[1m\033[32m\]\u@\h \w\[\033[0m\]\$ '
       ^^^^^^^^^^^^^^^            ^^^^^^^

Les commandes de coloriage sont soulignées. Notez comment ils sont entourés de \[ \].

58
hamstergene

J'ai le même problème, j'ai trouvé si tu changes 

Avancé> Émulation> Déclarez le terminal comme suit: ANSI.

Ceci résout le problème de couleur PS1. Avec un terminal Mac

MAIS crée un comportement étrange: J'ai trouvé une solution à mon problème avec @koiyu answer.

https://Apple.stackexchange.com/questions/37001/strange-behavior-in-terminal-with-custom-bash-profile/37036#37036

7
guneysus

J'avais l'habitude d'avoir le même problème en raison de l'utilisation incorrecte des codes de couleur. Voici ma PS1 qui a résolu le problème. De plus, si vous utilisez GIT, cela sera également utile pour montrer la branche git sur laquelle vous travaillez et si votre arbre de travail est sale ou non. Mettez ceci dans votre .profile ou .bash_profile

# Git branch in Prompt.
parse_git_branch() {
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

parse_git_dirty() {
    st=$(git status 2>/dev/null | tail -n 1)
    if [[ $st == "" ]]; then
        echo ''
    Elif [[ $st == "nothing to commit (working directory clean)" ]]; then
        echo ''
    Elif [[ $st == 'nothing added to commit but untracked files present (use "git add" to track)' ]]; then
        echo '?'
    else
        echo '*'
    fi
}

# coloring the terminal comman line
SB_GREEN="\[\033[1;32m\]"
SB_BLUE="\[\033[1;34m\]"
SB_RED="\[\033[1;31m\]"
SB_NOCOLOR="\[\033[0m\]"
export PS1="$SB_GREEN\u@\h$SB_NOCOLOR: $SB_BLUE\w$SB_GREEN\$(parse_git_branch)$SB_RED\$(parse_git_dirty)$SB_NOCOLOR $ "

J'espère que cela t'aides.

5
Jazzer

Avec les conseils de hamstergene j'ai pu comprendre comment le faire jouer à Nice. En utilisant ce guide Geek Stuff et ce tutoriel It's Me Tommy , j’ai été en mesure de définir la manière dont je souhaitais afficher le texte PS1. Changer cela en quelque chose de beaucoup plus simplifié a éliminé le problème de chevauchement de texte étrange que je rencontrais.

Avant:

before

Après:

after

J'ai simplement édité mon .bash_profile et ajouté la ligne suivante:

export PS1="[\u@\h] > ";

Ensuite, je suis allé et j'ai changé les couleurs de la fenêtre pour faire bonne mesure car je le peux.

1
Daryn

Le problème initial était qu'il y avait une nouvelle ligne dans la PS1 (à titre d'information pour tous ceux qui se heurtent à cela)

En règle générale, ses codes de couleur échappés de manière incorrecte, mais si ce n'est pas que c'est que vous avez une nouvelle ligne dans votre ps1

0
DebugXYZ