Se ha hecho una pregunta similar, pero como soy nuevo en Unix
la respuesta no me quedó clara debido al contexto. Lo que quiero hacer es pasar la salida de un comando como argumento a otro. Estoy usando git para el control de código fuente y trabajo en tres ramas diferentes.
Cada vez que necesito comprometerme, debo verificar mi rama y luego dar el comando correspondiente como
git pull --rebase origin <branch-name>
Quería escribir un alias como git-rebase
y lo que haría es que primero ejecutará git branch
.
La salida de la rama git se ve así
experiment
*master
new feature
Entonces, si tenemos dos ramas además de la rama maestra, mostrará todas las ramas y la rama actual estará marcada con una estrella. Quiero extraer la línea marcada con estrella y luego pasar la salida de esto al comando anterior.
También me gustaría suprimir la salida del comando git branch
. No estoy haciendo esto porque sea demasiado perezoso para escribir el comando completo, sino porque me gustaría aprender más sobre el poder de Unix bash. Esperando aprender algo de ello
Respuesta aceptada:
Primero, necesitas masajear la git branch
salida en un formato utilizable
$ git branch
experiment
* master
new feature
$ git branch | awk '/^\* / { print $2 }'
master
Ahora, quieres usar eso como argumento:
$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')
(o puede usar acentos graves como en la respuesta de psusi).
Esto debería está bien, el comando awk siempre debe coincidir exactamente con una línea, y asumo que no puede tener espacios en los nombres de las ramas. Para algo mucho más complicado, probablemente lo incluiría en una función (o una secuencia de comandos) para que pueda verificar la cordura de los valores intermedios.