Normalmente escribirías:
diff file1 file2
Pero me gustaría diferenciar un archivo y salida del comando (aquí hago que el comando sea trivial):
diff file1 <(cat file2 | sort)
Ok, esto funciona cuando ingreso esto manualmente en el indicador de comandos de shell, pero cuando pongo exactamente la misma línea en el script de shell y luego ejecuto el script, obtengo un error.
Entonces, la pregunta es: ¿cómo hacer esto correctamente?
Por supuesto, me gustaría evitar escribir la salida en un archivo temporal.
fuente
-R
en caso de usogit diff --no-index
diff - file1
.git diff
.git diff
es una bestia completamente diferente y opera con referencias a objetos globales en su índice interno, no a archivos;diff
opera en el sistema de archivos. La-
sintaxis es solo azúcar sintáctica de shell para/dev/stdin
, el archivo que representa la secuencia STDIN. Por lo tanto, ¿por quédiff
puede usarlo como sustituto de un nombre de archivo? Mientras tanto,git diff
no está buscando archivos, está buscando objetos, por lo que debe pasarle algo que reconozca. No lo use para comparar archivos entre sí, úselodiff
para eso.El alcance de la entrada estándar es el script en sí mismo, así que simplemente coloque su código dentro de un bloque como este:
De esta manera, el alcance del STDIN está dentro del bloque.
Lo he intentado y funciona.
fuente
<(…)
construcción. Su script funcionará o no, dependiendo de si lo ejecuta en un shell compatible<(…)
o no (ksh93 / bash / zsh vs Bourne / ash / kshk88). La respuesta de Caleb lo clava todo.