Prefiero no crear nuevos archivos. Quiero lograr algo similar a:¿Cómo puedo comparar la salida de dos comandos de Unix para encontrar la diferencia?
cmd1 > a
cmd2 > b
cat a b b | sort | uniq -u
pero sin usar los archivos a y b.
Prefiero no crear nuevos archivos. Quiero lograr algo similar a:¿Cómo puedo comparar la salida de dos comandos de Unix para encontrar la diferencia?
cmd1 > a
cmd2 > b
cat a b b | sort | uniq -u
pero sin usar los archivos a y b.
Las utilidades Unix generalmente están orientadas a archivos, por lo que nada hace lo que usted quiere.
Sin embargo, zsh puede autocreate archivos temporales con la siguiente sintaxis:
diff =(cmd1) =(cmd2)
También puede crear canalizaciones con nombre temporales (o usar los archivos especiales /dev/fdn
hacer referencia a las tuberías anónimos) con
diff <(cmd1) <(cmd2)
Sin embargo, muchos diff
s llaman a lseek()
en su entrada, por lo que no funcionarán con canalizaciones con nombre.
(diff
es, en general, un comando más útil para comparar la salida muy similar a la canalización de arriba.)
Consulte la sección "sustitución de proceso" de la página del manual "zshexpn" para más detalles.
La sintaxis '<(cmd)' es bastante estándar uno que también es compatible con shells más ampliamente utilizados como bash. Lo he usado con diff en el pasado sin notar ningún problema. – Porculus
Y, por supuesto, esto no solo dice con 'diff'. Lo uso para 'vimdiff' y otras herramientas también. – DerMike
Relacionado: [Salida diferida de dos programas sin archivos temporales] (http://stackoverflow.com/questions/3800202/diff-output-from-two-programs-without-temporary-files), [¿Cómo difiero? el resultado de dos comandos?] (http://askubuntu.com/questions/229447/how-do-i-diff-the-output-of-two-commands) – kenorb