Une question similaire a été posée, mais comme je suis nouveau sur Unix
la réponse n'était pas claire pour moi en raison du contexte. Ce que je veux faire, c'est passer la sortie d'une commande comme argument à une autre. J'utilise git pour le contrôle des sources et je travaille sur trois branches différentes.
Chaque fois que j'ai besoin de valider, je dois vérifier ma branche, puis donner la commande correspondante en tant que
git pull --rebase origin <branch-name>
Je voulais écrire un alias comme git-rebase
et ce qu'il ferait, c'est qu'il exécuterait d'abord git branch
.
La sortie de la branche git ressemble à ceci
experiment
*master
new feature
Donc, si nous avons deux branches en plus de la branche principale, toutes les branches seront affichées et la branche actuelle sera marquée d'une étoile. Je veux extraire la ligne marquée d'une étoile, puis en transmettre la sortie à la commande ci-dessus.
Aussi, je voudrais supprimer la sortie de la commande git branch
. Je ne fais pas cela parce que je suis trop paresseux pour taper toute la commande, mais parce que j'aimerais en savoir plus sur la puissance d'unix bash. En espérant en tirer quelque chose
Réponse acceptée :
Tout d'abord, vous devez masser la git branch
sortie dans un format utilisable
$ git branch
experiment
* master
new feature
$ git branch | awk '/^\* / { print $2 }'
master
Maintenant, vous voulez l'utiliser comme argument :
$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')
(ou vous pouvez utiliser des backticks comme dans la réponse de psusi).
Cela devrait ok, la commande awk doit toujours correspondre exactement à une ligne, et je suppose que vous ne pouvez pas avoir d'espaces dans les noms de branche. Pour quelque chose de beaucoup plus compliqué, je l'encapsulerais probablement dans une fonction (ou un script) afin que vous puissiez faire des vérifications de cohérence sur les valeurs intermédiaires.