2012-10-01 12 views
7

sto provando a scrivere uno script bash "live git log". Ecco il codice finora:chiudere il log git da uno script bash

#!/bin/sh 
while true; 
do 
    clear 
    git log --graph -10 --all --color --date=short --pretty=format:"%Cred%x09%h %Creset%ad%Cblue%d %Creset %s %C(bold)(%an)%Creset" 
    sleep 3 
done 

mio problema è che git log utilizza un pager e si deve premere q per uscire o sarà semplicemente seduti lì per sempre. c'è un modo per codificare il comando quit in bash? Ho provato ad echeggiare q, senza fortuna. (ho visto un altro post qui che suggeriva echo "q">/dev/console - ma non c'è alcuna console di sviluppo nel mio ambiente)

sistema: win7 box - emulazione di bash con mingw (1.7.6.msysget.0)

UPDATE

ecco lo script finito

#!/bin/sh 
while true; 
do 
    clear 
    git log \ 
    --graph \ 
    --all \ 
    --color \ 
    --date=short \ 
    -40 \ 
    --pretty=format:"%C(yellow)%h%x20%C(white)%cd%C(green)%d%C(reset)%x20%s%x20%C(bold)(%an)%Creset" | 
    cat - 
    sleep 15 
done 

il -40 è un gusto personale. cambiarlo in qualunque numero sia adatto a te e alle dimensioni dello schermo del terminale.

risposta

4

provare il seguente codice:

git log \ 
    --graph -10 \ 
    --all \ 
    --color \ 
    --date=short \ 
    --pretty=format:"%Cred%x09%h %Creset%ad%Cblue%d %Creset %s %C(bold)(%an)%Creset" | 
    cat - 

modificare

| cat - non è specifico per git , che funziona in ognuno di voi casi SE Quando si dispone di un pager e che ci si vuole stampare su STDOUT

+0

Aggiunte spiegazioni su '| cat -' –

+0

fantastico! questo è il biglietto! ma non capisco perché. che cosa fa esattamente "gatto"? e perché sta sovrascrivendo il cercapersone? – xero

+1

Costringe 'STDOUT' a passare' cat' –

1

impostazione, nello script:

export PAGER= 

farebbe il trucco

+0

stanco che dopo la linea dello shebang e nel ciclo while, senza fortuna. in realtà sembra che non abbia alcun effetto. ho stancato di impostarlo su niente, meno, di più, e askodjaskdlj (che dovrebbe causare un errore che assumerei) ma non ottengo nulla di diverso nei miei risultati. – xero

21

Aggiungendo --no-pager è la strada da percorrere .:

git --no-pager log 

Così il comando completo sarebbe

git --no-pager log --graph -10 --all --color --date=short --pretty=format:"%Cred%x09%h %Creset%ad%Cblue%d %Creset %s %C(bold)(%an)%Creset" 
+1

ok, questo è un inizio. non avevo sentito parlare della bandiera --no-pager. ma prova a chiamare quel comando. la formattazione è completamente andata, e ci sono (presumo) caratteri di escape nell'output. uscita completamente inutile. * [31m \t 4c29b0d [m2012-10-01 [34m (HEAD) [m updated test.php [1m (xero) [m – xero

+0

funziona correttamente sul mio Windows 7 box. Hai qualcosa incasinato sulla tua configurazione terminale, immagino? Lo sto usando con il prompt dei comandi, non attraverso Mingw. – eis

+0

dovuto confermare - funziona anche senza problemi con cygwin bash + altri ambienti. Nessuna esperienza con mingw però. – eis