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 zsh
s' =()
.
$ 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
bash
shell
tmp
process-substitution
Elazar Leibovich
fuente
fuente
mktemp
.bash
conHAVE_DEV_FD
set to0
.objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
objdump
, ese es el punto central de la pregunta. De<()
lo contrario fue lo suficientemente bueno.Respuestas:
Basado en el comentario de meuh; aparentemente bash here-strings puede ser abusado como archivos temporales, intente esto:
fuente
objdump ...
constat /dev/fd/9
para ver, no será un FIFO problemático o una tubería, sino un enlace simbólico a un archivo en/tmp
o$TMPDIR
).objdump
situación. Curiosamente, solo funcionó para mí congcc -o /dev/fd/9 [ . . . ]
, no congcc >&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.