web-dev-qa-db-fra.com

Comment enregistrer la sortie d'une commande git dans une variable?

Ce que je veux, c'est stocker le résultat d'une commande git (telle que le statut git) dans une variable d'un script shell. Lorsque je parle de sortie, je parle du texte renvoyé dans le terminal lors de l'exécution d'une commande, par exemple: lors d'un statut git en dehors de mon référentiel:

fatal: Not a git repository (or any of the parent directories): .git

J'ai essayé ceci:

var=$(git status)

Mais 'var' n'a rien stocké.

18
aliasav

Vous pouvez utiliser:

var=$(git status 2>&1)

c'est-à-dire rediriger stderr vers stdout, puis capturer la sortie. 

Sinon, lorsque des messages d'erreur sont écrits sur stderr et que votre commande: var=$(git status) ne capture que stdout.

27
anubhava

Ce message s'affiche en cas d'erreur standard. Par défaut, $ (cmd) ne capture que la sortie standard. Vous pouvez corriger le problème en redirigeant l'erreur standard vers la sortie standard - voir l'une des autres réponses. Cependant, vous pouvez utiliser le code de sortie à la place 

  • 128 pour ce cas
  • 0 si aucune erreur. 

Je recommande vivement de ne pas essayer de détecter la chaîne "fatal: Pas un référentiel git ..."

foo=$(git status)
fatal: Not a git repository (or any of the parent directories): .git
echo $?
128

De plus, il existe un statut git --porcelain et --short qui sont utiles pour les scripts.

Si vous utilisez Linux/OS X, etc., tous les détails se trouvent à man git-status

1
Adam