Uso spesso la tecnica descritta nella risposta accettata:
diff <(ls old) <(ls new)
ma trovo che di solito lo uso con comandi molto più complessi dell'esempio sopra. In questi casi può essere fastidioso creare il comando diff. Ho escogitato alcune soluzioni che altri potrebbero trovare utili.
Trovo che il 99% delle volte provo i comandi pertinenti prima di eseguire diff. Di conseguenza i comandi che desidero diff sono proprio lì nella mia storia ... perché non usarli?
Faccio uso del comando di comando bash Fix Fix (fc) per eseguire gli ultimi due comandi:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
I flag fc sono:
-n : nessun numero. Sopprime i numeri di comando durante l'elenco.
-l : Elenco: i comandi sono elencati nell'output standard.
il -1
-1
riferimento all'inizio e alla fine nella storia, in questo caso è dall'ultimo comando all'ultimo comando che produce solo l'ultimo comando.
Infine, lo includiamo $()
per eseguire il comando in una subshell.
Ovviamente questo è un po 'una seccatura da digitare, quindi possiamo creare un alias:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
Oppure possiamo creare una funzione:
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") )
}
che supporta la specifica delle righe della cronologia da utilizzare. Dopo aver usato entrambi trovo che l'alias sia la versione che preferisco.