Często używam techniki opisanej w zaakceptowanej odpowiedzi:
diff <(ls old) <(ls new)
ale zwykle używam go z dużo bardziej złożonymi poleceniami niż w powyższym przykładzie. W takich przypadkach ułożenie komendy diff może być denerwujące. Wymyśliłem kilka rozwiązań, które inni mogą uznać za przydatne.
Uważam, że w 99% przypadków wypróbowuję odpowiednie polecenia przed uruchomieniem mechanizmu różnicowego. W związku z tym polecenia, które chcę udostępnić, są właśnie w mojej historii ... dlaczego ich nie użyć?
Korzystam z wbudowanego bash Fix Command (fc) do wykonania dwóch ostatnich poleceń:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Flagi FC to:
-n : brak numeru. Pomija numery poleceń podczas listowania.
-l : Listing: Polecenia są wymienione na standardowym wyjściu.
-1
-1
odnoszą się do rozpoczęcia i zakończenia positing w historii, w tym przypadku ITS od ostatniego polecenia do ostatniego polecenia co daje tylko ostatnie polecenie.
Na koniec zamykamy to, $()
aby wykonać polecenie w podpowłoce.
Oczywiście jest to trochę kłopotliwe w pisaniu, abyśmy mogli stworzyć alias:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Lub możemy stworzyć funkcję:
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") )
}
który obsługuje określenie linii historii do użycia. Po użyciu obu znajduję alias, który preferuję.