Bash-Alias ​​/ Funktion, um jedes "git diff" mit "clear" zu beginnen

366
Bugs Bunny

Jedes Mal, wenn git diffich das tue, würde ich lieber meine Bash machen clear & git diff.

Ich habe versucht, eine Antwort bei " Bash: Spaces in Alias " wie folgt zu optimieren :

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

Aber das funktioniert leider nicht (die Befehlszeile endet in einer Art Endlosschleife zwischen bashund gitfür immer und ich muss davon [CTRL|CMD]+Cabbrechen).

1

1 Antwort auf die Frage

2
grawity

Dinge, die sich auf den Rest der Linie beziehen commandoder sudonicht, sind magisch. (Nur #Kommentare und das timeBuiltin haben solche Magie.)

Das heißt, wenn Sie es verwenden command clear && git diff, wird es zunächst auf zwei separate Befehle erweitert: command clear(wobei das Präfix "Befehl" nicht verwendet wird) und git diff(wo es benötigt wird).

Die korrekte Funktion wäre:

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

Alternative:

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

(Verwenden Sie "$@"in beiden Fällen, wie Sie es vielleicht eines Tages brauchen git diff --cachedoder so.)