sustitución del proceso bash con archivo temporal

8

Algunos programas necesitan que sus archivos sean buscables, por ejemplo objdump.

$ objdump -D -b binary -m i8086 <(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
objdump: Warning: '/proc/self/fd/11' is not an ordinary file

Sería conveniente que la sustitución del proceso utilice archivos temporales.

Puedo ver en la página del manual que bash puede recurrir a archivos temporales con sustitución de procesos, pero ¿puedo pedirle explícitamente que use archivos temporales?

Como zshs' =().

$ objdump -D -b binary -m i8086 =(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)

/tmp/zsh1u1Nrw:     file format binary


Disassembly of section .data:

00000000 <.data>:
   0:   ea 5b e0 00 f0          ljmp   $0xf000,$0xe05b
Elazar Leibovich
fuente
Lo dudo, pero siempre puedes usarlo mktemp.
Comodín el
1
Tal vez deberías intentar compilar bashcon HAVE_DEV_FDset to 0.
Cuonglm
66
Se puede usar un reubicable cadena aquí en su lugar:objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh
2
Ups ¡La versión de cadena aquí deja caer silenciosamente el carácter nulo!
Meuh
1
@Wildcard usando fifo no es posible con objdump, ese es el punto central de la pregunta. De <()lo contrario fue lo suficientemente bueno.
Elazar Leibovich

Respuestas:

2

Basado en el comentario de meuh; aparentemente bash here-strings puede ser abusado como archivos temporales, intente esto:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
bernardelli
fuente
El truco es que aquí los documentos y las cadenas aquí usan archivos temporales debajo del capó (reemplace objdump ...con stat /dev/fd/9para ver, no será un FIFO problemático o una tubería, sino un enlace simbólico a un archivo en /tmpo $TMPDIR).
Sr.Spuratic
Usé el método de tu respuesta para mi objdumpsituación. Curiosamente, solo funcionó para mí con gcc -o /dev/fd/9 [ . . . ], no con gcc >&9 -o - [ . . . ]. Iba a escribir una respuesta (no a la situación de objdump, sino a una situación no sensible a nulos) que usaba un documento aquí con una sustitución de comando, pero luego vi que ya había mencionado una cadena aquí en los comentarios de la pregunta , que es aún mejor.
clacke