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 :

[sed] Afficher la branche git dans le prompt, impossible de supprimer l'espace au début de la chaine


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juin 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 89
    Par défaut [sed] Afficher la branche git dans le prompt, impossible de supprimer l'espace au début de la chaine
    Bonjour,
    Je souhaite afficher la branche git dans le prompt, j'édite la variable PS1 dans le bashrc avec une fonction qui utilise sed.
    La commande en question est la suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/*\(.*\)/(\1)/'
    le problème c'est que cette commande ne retire pas l'espace situé avant le nom de la branche.
    En gros elle me retourne
    alors que je voudrais qu'elle me retourne
    Pour information, la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git branch 2> /dev/null | sed -e '/^[^*]/d'
    me retourne
    J'ai essayé divers choses sur les RE, mais bon je vais pas rentrer dans le détail, je pense que quelque chose m'échappe.
    Merci!

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 724
    Par défaut
    Bonjour,

    comment traduis-tu tes commandes sed ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PS1="($(git branch | sed 's/\* //'))"
    KISS!

  3. #3
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 332
    Par défaut
    bonjour

    pourquoi ne pas faire un simple git branch --show-current

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juin 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 89
    Par défaut
    Citation Envoyé par papajoker Voir le message
    bonjour

    pourquoi ne pas faire un simple git branch --show-current
    Pourquoi faire simple quand on peut faire compliqué

    En fait je veux que le prompt ne soit pas modifié lorsque le terminal n'est pas dans un repo.

  5. #5
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 332
    Par défaut
    Citation Envoyé par Toug19 Voir le message
    mais il manque les parenthèses.
    reste à savoir si on a toujours les parenthèses ou uniquement si on a un dépôt git ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    git branch --show-current 2>/dev/null | sed 's/.*/(&)/'
    EDIT:
    pour plus de clarté, je préfère créer des fonctions dans le .bashrc, exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    prompt_git() {
        echo -n git branch --show-current 2>/dev/null | sed 's/.*/(&)/'
    }
    prompt_heure() {
     declare h=($(date +%_I))
     declare hs='🕛🕐🕑🕒🕓🕔🕕🕖🕗🕘🕙🕚🕛'
     echo -n "${hs:$h:1}"
    }
    PS1='\u@\h \$(prompt_git)  \$(prompt_heure) \W \$ '

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur validation
    Inscrit en
    Juin 2012
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur validation
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Juin 2012
    Messages : 89
    Par défaut
    Merci ça marche parfaitement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 724
    Par défaut
    useless use of sed!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    prompt_git() {
        echo -n "($(git branch --show-current 2>/dev/null))"
    }

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 332
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    useless use of sed
    J'ai pas bien expliqué ? on ajoute les parenthèses uniquement si on est dans un repo
    ps: avec une fonction, ok, on peut très facilement s'en passer
    name=commande git
    [ ! -z $name ] && echo -n "($name)"

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 724
    Par défaut
    J'ai pas bien expliqué ?
    je ne lis pas les explications; uniquement le code, le code, le code.
    on ajoute les parenthèses uniquement si on est dans un repo
    mais, là, tu les ajoutes inconditionnellement.
    n'y aurait-il pas un point en trop dans ton expression ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo '* bla bla' | sed 's/.*/(&)/'
    (* bla bla)
    $ echo 'bla bla' | sed 's/.*/(&)/'
    (bla bla)

  10. #10
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 332
    Par défaut
    GIT
    C'était uniquement la première commande git qui retournait un caractère * en préfixe et des espaces et, éventuellement plusieurs lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ git branch
      fr
    * main
     
    $ git branch --show-current 2>/dev/null
    main
    SED
    Donc nous n'avons que 2 cas : soit rien (pas une ligne vide!), soit un mot

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ echo -n '' | sed 's/.*/(&)/'
     
    $ echo  'main' | sed 's/.*/(&)/'
    (main)
    ok, ici le sed est plus une ruse de sioux si on désire passer cette commande directement dans PS1
    le coder avec un test est certainement plus rapide
    name=$(git branch --show-current 2>/dev/null); [ ! -z "$name" ] && echo -n "($name)"
    (je ne sais si existe une version plus courte élégante en pur bash...)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 724
    Par défaut
    git branch --show-current peut ne rien retourner ?

  12. #12
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 332
    Par défaut
    tu n'as jamais utilisé git ??? cette commande retourne 99,9 fois sur 100 uniquement une phrase dans stderr du type "vous n'êtes pas dans un dépôt git"
    ps: la particularité de cette commande est de rechercher depuis le répertoire courent jusqu'à la racine

    donc git branch --show-current 2>/dev/null ne retourne rien.

    si on ne compte pas de différence de vitesse, on peut réécrire cette fonction git en bash comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    searchdir="$PWD"
    while true; do
      f="$searchdir/.git/HEAD"
      if [ -f "$f" ] ; then
        content="$(< "$f")" # ref: refs/heads/main
        echo "(git branche : ${content/*\//})" # main
        exit 0 
      fi
      searchdir="${searchdir%/*}" # on remonte au répertoire parent
      [ -z "$searchdir" ] && exit 128 # nous ne sommes pas dans un repo git
    done
    exit 1

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

Discussions similaires

  1. Réponses: 16
    Dernier message: 30/12/2022, 19h57
  2. Afficher la valeur d'un GtkEntry dans le prompt
    Par motenai dans le forum GTK+ avec PHP
    Réponses: 2
    Dernier message: 11/07/2008, 15h07
  3. Afficher un varchar complet dans un input text
    Par PrinceMaster77 dans le forum ASP
    Réponses: 4
    Dernier message: 25/06/2004, 13h17
  4. Afficher une image stockée dans interbase
    Par NicolasR dans le forum Bases de données
    Réponses: 2
    Dernier message: 01/06/2004, 11h00
  5. [VB.NET] afficher une image stockée dans une table
    Par matonfire dans le forum ASP.NET
    Réponses: 4
    Dernier message: 19/03/2004, 12h21

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