
Se hizo una pregunta similar, pero como soy nuevo en esto, Unix
la respuesta no me quedó clara debido al contexto. Lo que quiero hacer es pasar el resultado de un comando como argumento a otro. Estoy usando git para el control de código fuente y trabajando en tres ramas diferentes.
Cada vez que necesito comprometerme, tengo que 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 se ejecutará git branch
.
La salida de git branch se ve así
experiment
*master
new feature
Entonces, si tenemos dos ramas además de la rama maestra, se mostrarán todas las ramas y la rama actual estará marcada con una estrella. Quiero extraer la línea marcada con una estrella y luego pasar el resultado de esto al comando anterior.
También me gustaría suprimir la salida del comando git branch
. No estoy haciendo esto porque sea demasiado vago para escribir el comando completo, sino porque me gustaría aprender más sobre el poder de Unix bash. Con la esperanza de aprender algo de ello.
Respuesta1
Primero, debe adaptar la git branch
salida a 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 comillas invertidas como en la respuesta de psusi).
EstedeberíaEstá bien, el comando awk siempre debe coincidir exactamente con una línea, y supongo que no puedes tener espacios en los nombres de las ramas. Para algo mucho más complicado, probablemente lo incluiría en una función (o script) para que puedas realizar algunas comprobaciones de cordura en los valores intermedios.
Respuesta2
También está elxargs
dominio.
xargs - build and execute command lines from standard input
Entonces la respuesta anterior de @Useless se traduciría a:
git branch | sed -ne 's/\*//p' | xargs git pull --rebase origin
Respuesta3
Hay varias maneras. La más sencilla es con sustitución de comillas invertidas:
git pull --rebase origin `git branch | sed -ne 's/\*//p'`