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 habituellement avec des commandes beaucoup plus complexes que l'exemple ci-dessus. Dans de tels cas, il peut être ennuyeux d’exécuter la commande diff. J'ai trouvé des solutions que d'autres pourraient trouver utiles.
Je trouve que 99% du temps, j'essaie les commandes appropriées avant d'exécuter diff. Par conséquent, les commandes que je veux différencier sont là dans mon histoire ... pourquoi ne pas les utiliser?
Je me sers de la commande Fix (fc) bash intégrée 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 la liste.
-l : Listing: Les commandes sont listées sur la sortie standard.
Les -1
-1
références aux positions de début et de fin dans l'historique, dans ce cas, de la dernière commande à la dernière, qui ne produit que la dernière.
Enfin, nous encapsulons ceci $()
pour exécuter la commande dans un sous-shell.
De toute évidence, il est un peu difficile à taper afin que nous puissions 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 prend en charge la spécification des lignes d’historique à utiliser. Après avoir utilisé les deux, je trouve que l'alias est la version que je préfère.