Costumo usar a técnica descrita na resposta aceita:
diff <(ls old) <(ls new)
mas acho que geralmente o uso com comandos muito mais complexos que o exemplo acima. Nesses casos, pode ser irritante criar o comando diff. Eu vim com algumas soluções que outros podem achar úteis.
Acho que 99% das vezes eu tento os comandos relevantes antes de executar o diff. Consequentemente, os comandos que eu quero diferenciar estão aí na minha história ... por que não usá-los?
Utilizo o bash Fix Command (fc) interno para executar os dois últimos comandos:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Os sinalizadores fc são:
-n : sem número. Suprime os números de comando ao listar.
-l : Listagem: Os comandos estão listados na saída padrão.
o -1
-1
referem-se às posições inicial e final da história, neste caso, do último comando ao último comando que produz apenas o último comando.
Por fim, envolvemos isso $()
para executar o comando em um subshell.
Obviamente, isso é um pouco trabalhoso de digitar, para que possamos criar um alias:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Ou podemos criar uma função:
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") )
}
que suporta a especificação das linhas do histórico a serem usadas. Depois de usar os dois, acho que o alias é a versão que eu prefiro.