IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Retour à la ligne bizarre dans le terminal après modification de .bashrc


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Par défaut Retour à la ligne bizarre dans le terminal après modification de .bashrc
    Bonjour

    J'ai essayé de modifier le fichier ~/.bashrc sur linux pour afficher la branche git courante dans le terminal. J'ai trouvé ça sur internet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    parse_git_branch()
    {
      local BRANCH=$(git symbolic-ref HEAD --short 2> /dev/null)
      if [[ ! -z "$BRANCH" ]]
      then
        echo "($BRANCH)"
      fi
    }
    
    YELLOW='\e[0;33m'      # Yellow
    
    export PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w ${YELLOW}$(parse_git_branch)\[\033[00m\]\n\$ "

    Le code comme ça fonction très bien, mais le problème est que après afficher user@pc:~/dossier (branche) dans le terminal, cela retourne à la ligne avant de mettre le $ pour saisir les commandes, et je préférerai que cela reste sur la même ligne.
    J'ai donc enlevé le \n (celui que j'ai mis en gras dans le code ci-dessus) pour qu'il n'y ait pas de retour à la ligne. Dans ce cas le $ et la saisie se situent bien sur la même ligne, mais lorsque que tape, si cela dépasse la taille du terminal (par exemple au delà de 80 caractères), au lieu d'écrire la suite sur la ligne du dessous, cela l'écrit au début de la même ligne, par dessus le texte qui y était déjà.

    Après quelques essais, je me suis rendu compte que si j'enlève le $(parse_git_branch), je n'ai pas ce problème, mais je n'ai pas réussi à résoudre cela...

    Est-ce que quelqu'un a une idée de comment faire ?

    Merci

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 358
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 358
    Par défaut
    Le problème vient de ton YELLOW, il faut le protéger pour que bash ne le comptabilise pas, donc:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    YELLOW='\[\e[0;33m\]'      # Yellow

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Par défaut
    Merci beaucoup le retour à la ligne fonctionne bien maintenant !

    Par contre (et peut être ça le faisait déjà avant je n'y avais pas fait attention), lorsque je change de branche sur git, ça laisse encore l'ancien nom de branche. Mais si j'ouvre un nouveau terminal le nom est bien changé. Est-ce que c'est normal ?

    Merci

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 664
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 664
    Par défaut
    oui, c'est normal. PS1 n'est pas actualisé après chaque commande. il est défini ±une fois pour toute dans le ~/.bashrc.
    il est bien sûr possible de le redéfinir dans le cours de la session, mais ce n'est pas fait automatiquement.
    pour ça, il faut utiliser PROMPT_COMMAND. cf. man bash.
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2016
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2016
    Messages : 7
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    oui, c'est normal. PS1 n'est pas actualisé après chaque commande. il est défini ±une fois pour toute dans le ~/.bashrc.
    il est bien sûr possible de le redéfinir dans le cours de la session, mais ce n'est pas fait automatiquement.
    pour ça, il faut utiliser PROMPT_COMMAND. cf. man bash.

    Je n'ai pas réussi à faire fonctionner PROMPT_COMMAND, malgré le manuel :/
    Tout ce que j'ai réussi à faire c'est afficher un texte à chaque fois...

  6. #6
    Membre émérite Avatar de balkany
    Homme Profil pro
    Touriste
    Inscrit en
    Juillet 2017
    Messages
    348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Touriste

    Informations forums :
    Inscription : Juillet 2017
    Messages : 348
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    PROMPT_COMMAND='
    parse_git_branch()
    {
      local BRANCH=$(git symbolic-ref HEAD --short 2> /dev/null)
      if [[ ! -z "$BRANCH" ]]
      then
        echo "($BRANCH)"
      fi
    }
    YELLOW="\[\e[0;33m\]"
    PS1="\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w ${YELLOW}$(parse_git_branch)\[\033[00m\]\$ "
    '
    Mais tu vas avoir un problème si tu fais set -x

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. retour à la ligne automatique dans php-eclipse
    Par Severance dans le forum Eclipse PHP
    Réponses: 4
    Dernier message: 29/03/2009, 16h14
  2. [JS][TAGLIBS]Retour à la ligne intempestif dans le code source
    Par Alexandre T dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 18/05/2007, 13h55
  3. retour à la ligne automatique dans un TCanvas
    Par richard038 dans le forum API, COM et SDKs
    Réponses: 12
    Dernier message: 27/03/2006, 21h39
  4. Retour à la ligne automatique dans les div
    Par Delphy113 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 15/02/2006, 10h42
  5. retour à la ligne auto dans un bête tableau
    Par junty dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 13/10/2005, 17h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo