Como posso canalizar stdout para outro programa?

6

Eu estou tentando configurar um linter para o meu código e eu só quero lint os arquivos de café que foram alterados no ramo atual. Então, eu gero a lista de arquivos usando git :

git diff --name-only develop | grep coffee$

Isso me dá uma boa lista dos arquivos que eu gostaria de processar, mas não me lembro como canalizar isso para o programa de linting para realmente fazer o trabalho. Basicamente, gostaria de algo semelhante a find ' -exec :

find . -name \*.coffee -exec ./node_modules/.bin/coffeelint '{}' \;

Obrigado!

    
por spinlock 22.07.2014 / 19:15

2 respostas

1

xargs é o utilitário unix que eu estava procurando. Na página do manual:

The xargs utility reads space, tab, newline and end-of-file delimited strings from the standard input and executes utility with the strings as arguments.

Any arguments specified on the command line are given to utility upon each invocation, followed by some number of the arguments read from the standard input
 of xargs.  The utility is repeatedly executed until standard input is exhausted.

Então, a solução para minha pergunta original é:

git diff --diff-filter=M --name-only develop | grep coffee$ | xargs ./node_modules/.bin/coffeelint
    
por 25.07.2014 / 23:25
2

Basta passar por um loop while:

git diff --name-only develop | grep coffee$ | while IFS= read -r file; do
    ./node_modules/.bin/coffeelint "$file"
done
    
por 22.07.2014 / 19:31