Ich verwende oft die in der akzeptierten Antwort beschriebene Technik:
diff <(ls old) <(ls new)
Aber ich finde, ich benutze es normalerweise mit viel komplexeren Befehlen als im obigen Beispiel. In solchen Fällen kann es ärgerlich sein, den Befehl diff zu erstellen. Ich habe einige Lösungen gefunden, die für andere nützlich sein könnten.
In 99% der Fälle probiere ich die entsprechenden Befehle aus, bevor ich diff ausführe. Folglich sind die Befehle, die ich unterscheiden möchte, genau dort in meinem Verlauf ... warum nicht sie verwenden?
Ich benutze den eingebauten Fix Command (fc) -Bash, um die letzten beiden Befehle auszuführen:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Die fc Flags sind:
-n : Keine Nummer. Es unterdrückt die Befehlsnummern bei der Auflistung.
-l : Auflistung: Die Befehle werden in der Standardausgabe aufgelistet.
Sie -1
-1
beziehen sich auf die Start- und Endposition in der Historie, in diesem Fall vom letzten Befehl bis zum letzten Befehl, der nur den letzten Befehl liefert.
Zuletzt schließen wir dies ein $()
, um den Befehl in einer Subshell auszuführen.
Offensichtlich ist es etwas mühsam, dies einzugeben, damit wir einen Alias erstellen können:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Oder wir können eine Funktion erstellen:
dl() {
if [[ -z "$1" ]]; then
first="1"
else
first="$1"
fi
if [[ -z "$2" ]]; then
last="2"
else
last="$2"
fi
# shellcheck disable=SC2091
diff --color <( $(fc -ln "-$first" "-$first") ) <( $(fc -ln "-$last" "-$last") )
}
Dies unterstützt die Angabe der zu verwendenden Verlaufszeilen. Nach der Verwendung von beiden finde ich, dass der Alias die Version ist, die ich bevorzuge.