J'utilise souvent la technique décrite dans la réponse acceptée :
diff <(ls old) <(ls new)
mais je trouve que je l'utilise généralement avec des commandes beaucoup plus complexes que l'exemple ci-dessus. Dans de tels cas, il peut être ennuyeux d'utiliser la commande diff. J'ai trouvé quelques solutions que d'autres pourraient trouver utiles.
Je trouve que 99% du temps, j'essaie les commandes pertinentes avant de lancer diff. Par conséquent, les commandes que je veux différencier se trouvent dans mon historique... pourquoi ne pas les utiliser ?
J'utilise la commande fixe (fc) bash builtin pour exécuter les deux dernières commandes :
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Les drapeaux fc sont :
-n : Pas de numéro. Il supprime les numéros de commande lors de l'énumération.
-l : Listing : Les commandes sont listées sur la sortie standard.
le site -1
-1
se réfèrent à la position de début et de fin dans l'historique, dans ce cas, c'est de la dernière commande à la dernière commande qui donne juste la dernière commande.
Enfin, nous enveloppons le tout dans $()
pour exécuter la commande dans un sous-shell.
Il est évident que c'est un peu difficile à taper, nous pouvons donc créer un alias :
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Ou nous pouvons créer une fonction :
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") )
}
qui permet de spécifier les lignes d'historique à utiliser. Après avoir utilisé les deux, je trouve que l'alias est la version que je préfère.