substituição do processo do bash com arquivo temporário

8

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
Elazar Leibovich
fonte
Duvido, mas você sempre pode usar mktemp.
Curinga
1
Talvez você deva tentar compilar bashcom HAVE_DEV_FDset 0.
cuonglm
6
Você pode usar uma string aqui procurável :objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh 14/03
2
Opa A versão da string here descarta silenciosamente o caractere nulo!
Meu 14/03/16
1
@Wildcard usando o fifo não é possível com objdump, esse é o objetivo da questão. Caso contrário, <()era bom o suficiente.
Elazar Leibovich 14/03

Respostas:

2

Baseado no comentário do meuh; aparentemente bash here-strings podem ser abusadas como arquivos temporários, tente o seguinte:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
Bernardelli
fonte
O truque é que aqui os documentos e as seqüências de caracteres aqui usam arquivos temporários sob o capô (substitua objdump ...por stat /dev/fd/9para ver, não será um FIFO ou um pipe problemático, mas um link simbólico para um arquivo em /tmpou $TMPDIR).
mr.spuratic
Eu usei o método da sua resposta para a minha objdumpsituação. Curiosamente, isso só funcionou para mim gcc -o /dev/fd/9 [ . . . ], não com gcc >&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.
clacke