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

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<<<''

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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.