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

-Ren caso de usogit diff --no-indexdiff - file1.git diff.git diffes una bestia completamente diferente y opera con referencias a objetos globales en su índice interno, no a archivos;diffopera 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édiffpuede usarlo como sustituto de un nombre de archivo? Mientras tanto,git diffno está buscando archivos, está buscando objetos, por lo que debe pasarle algo que reconozca. No lo use para comparar archivos entre sí, úselodiffpara 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.