A menudo uso la técnica descrita en la respuesta aceptada:
diff <(ls old) <(ls new)
pero encuentro que generalmente lo uso con comandos mucho más complejos que el ejemplo anterior. En tales casos, puede ser molesto crear el comando diff. He encontrado algunas soluciones que otros pueden encontrar útiles.
Encuentro que el 99% del tiempo pruebo los comandos relevantes antes de ejecutar diff. En consecuencia, los comandos que quiero diferenciar están ahí en mi historia ... ¿por qué no usarlos?
Hago uso del comando Fix (fc) bash incorporado para ejecutar los últimos dos comandos:
$ echo A
A
$ echo B
B
$ diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )
1c1
< B
---
> A
Las banderas fc son:
-n : Sin número. Suprime los números de comando al enumerar.
-l : Listado: Los comandos se enumeran en la salida estándar.
se -1
-1
refieren a la posición de inicio y fin en el historial, en este caso es desde el último comando hasta el último comando que produce solo el último comando.
Por último, envolvemos esto $()
para ejecutar el comando en una subshell.
Obviamente, esto es un poco difícil de escribir para que podamos crear un alias:
alias dl='diff --color <( $(fc -ln -1 -1) ) <( $(fc -ln -2 -2 ) )'
O podemos crear una función:
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 admite especificar las líneas del historial que se utilizarán. Después de usar ambos, encuentro que el alias es la versión que prefiero.