Bash alias / function para preceder todos os "git diff" com "clear"

1

Sempre que faço git diff , gostaria que o meu bash fizesse clear & git diff .

Eu tentei ajustar uma resposta em " Bash: espaços no nome do alias " assim:

git() {
    if [[ $@ == "diff" ]]; then
        command clear && git diff
    else
        command git "$@"
    fi
}

Mas, infelizmente, isso não funciona (a linha de comando termina em uma espécie de loop infinito alternando entre bash e git forever e eu preciso de [CTRL|CMD]+C para quebrar isso).

    
por Bugs Bunny 12.02.2016 / 14:27

1 resposta

2

Coisas como command ou sudo não se aplicam magicamente ao restante da linha. (Somente # comentários e time incorporados têm essa mágica.)

Ou seja, se você usar command clear && git diff , ele será primeiro expandido para dois comandos separados: command clear (onde o prefixo "command" é inútil) e git diff (onde for necessário).

A função correta seria:

git() {
    if [[ $1 == "diff" ]]; then
        clear && command git "$@"
    else
        command git "$@"
    fi
}

Alternativamente:

git() {
    if [[ $1 == diff ]]; then
        clear
    fi
    command git "$@"
}

(Use "$@" em ambos os casos, pois você poderá precisar de git diff --cached ou algo assim.)

    
por 12.02.2016 / 14:39