Como posso passar a saída de um comando como um argumento para outro

4

Uma pergunta semelhante foi feita, mas como sou nova em Unix , a resposta não ficou clara para mim devido ao contexto. O que eu quero fazer é passar a saída de um comando como um argumento para outro. Eu estou usando o git para controle de origem e trabalhando em três diferentes ramos.

Sempre que preciso confirmar, preciso verificar minha ramificação e, em seguida, dar o comando correspondente como

git pull --rebase origin <branch-name>

Eu queria escrever um alias como git-rebase e o que ele faria é que primeiro executaria git branch .

A saída do ramo git se parece com isso

experiment
*master
new feature

Portanto, se tivermos duas ramificações além da ramificação principal, ela mostrará todas as ramificações e a ramificação atual será marcada com estrela. Eu quero extrair a estrela marcada e, em seguida, passar a saída deste para o comando acima.

Além disso, gostaria de suprimir a saída do comando git branch . Eu não estou fazendo isso porque estou com preguiça de digitar o comando inteiro, mas porque eu gostaria de aprender mais sobre o poder do unix bash. Na esperança de aprender algo com isso

    
por Sachin 16.03.2012 / 16:44

3 respostas

5

Primeiro, você precisa massagear a saída git branch em um formato utilizável

$ git branch
  experiment
* master
  new feature

$ git branch | awk '/^\* / { print $2 }'
master

Agora, você quer usar isso como um argumento:

$ git pull --rebase origin $(git branch | awk '/^\* / { print $2 }')

(ou você pode usar backticks como na resposta do psusi).

Este deve ser ok, o comando awk deve sempre corresponder exatamente a uma linha, e eu estou supondo que você não pode ter espaços nos nomes das ramificações. Para qualquer coisa muito mais complicada, eu provavelmente iria envolvê-lo em uma função (ou um script) para que você possa fazer alguma verificação de integridade nos valores intermediários.

    
por 16.03.2012 / 17:25
3

Existe também o comando xargs .

xargs - build and execute command lines from standard input

Portanto, a resposta acima de @Useless seria traduzida para:

git branch | sed -ne 's/\*//p' | xargs git pull --rebase origin
    
por 16.03.2012 / 19:44
2

Existem várias maneiras. O mais simples é com a substituição de backtick:

git pull --rebase origin 'git branch | sed -ne 's/\*//p''
    
por 16.03.2012 / 17:04

Tags