Я часто использую технику, описанную в принятом ответе:
diff <(ls old) <(ls new)
но я нахожу, что обычно использую его с гораздо более сложными командами, чем в примере выше. В таких случаях создание команды diff может раздражать. Я придумал некоторые решения, которые другие могут найти полезными.
Я считаю, что в 99% случаев я пробую соответствующие команды перед запуском diff. Следовательно, команды, которые я хочу использовать, прямо в моей истории ... почему бы не использовать их?
Я использую встроенную команду Fix Command (fc) bash для выполнения двух последних команд:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Флаги ФК:
-n : нет номера. Подавляет номера команд при перечислении.
-l : Listing: команды перечислены в стандартном выводе.
-1
-1
относятся к начальному и конечному полаганию в истории, в этом случае его от последней команды до последней команды , которая дает только последнюю команду.
Наконец, мы завернем это, $()
чтобы выполнить команду в подоболочке.
Очевидно, что набирать текст немного неудобно, поэтому мы можем создать псевдоним:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Или мы можем создать функцию:
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") )
}
который поддерживает указание линий истории для использования. После использования обоих я считаю, что псевдоним - это версия, которую я предпочитаю.