Alguns programas precisam que seus arquivos sejam procurados, por exemplo 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
Seria conveniente que a substituição do processo usasse arquivos temporários.
Posso ver na página do manual que o bash pode fazer o fallback para arquivos temporários com substituição de processo, mas posso pedir explicitamente que ele use arquivos temporários?
Como zsh
é =()
.
$ 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
fonte
fonte
mktemp
.bash
comHAVE_DEV_FD
set0
.objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
objdump
, esse é o objetivo da questão. Caso contrário,<()
era bom o suficiente.Respostas:
Baseado no comentário do meuh; aparentemente bash here-strings podem ser abusadas como arquivos temporários, tente o seguinte:
fonte
objdump ...
porstat /dev/fd/9
para ver, não será um FIFO ou um pipe problemático, mas um link simbólico para um arquivo em/tmp
ou$TMPDIR
).objdump
situação. Curiosamente, isso só funcionou para mimgcc -o /dev/fd/9 [ . . . ]
, não comgcc >&9 -o - [ . . . ]
. Eu ia escrever uma resposta (não para a situação objdump, mas para uma situação não nula) que usava um documento aqui com uma substituição de comando, mas depois vi que você já havia mencionado uma string aqui nos comentários da pergunta , o que é ainda melhor.