substitution de processus bash avec un fichier temporaire

8

Certains programmes ont besoin que leurs fichiers soient consultables, par exemple 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

Il serait pratique que la substitution de processus utilise des fichiers temporaires.

Je peux voir dans la page de manuel que bash peut revenir aux fichiers temporaires avec substitution de processus, mais puis-je lui demander explicitement d'utiliser des fichiers temporaires?

Comme zshl » =().

$ 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
la source
J'en doute, mais vous pouvez toujours l'utiliser mktemp.
Wildcard
1
Vous devriez peut-être essayer de compiler bashavec HAVE_DEV_FDset to 0.
cuonglm
6
Vous pouvez utiliser une chaîne recherchée ici à la place:objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh
2
Oops. La version chaîne ici supprime silencieusement le caractère nul!
meuh
1
@Wildcard utilisant fifo n'est pas possible avec objdump, c'est tout le point de la question. Sinon, <()c'était assez bien.
Elazar Leibovich

Réponses:

2

Basé sur le commentaire de meuh; apparemment bash ici-les chaînes peuvent être utilisées abusivement en tant que fichiers temporaires, essayez ceci:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
bernardelli
la source
L'astuce est qu'ici les documents et ici les chaînes utilisent des fichiers temporaires sous le capot (remplacez objdump ...par stat /dev/fd/9pour voir, ce ne sera pas un FIFO ou un pipe problématique, mais un lien symbolique vers un fichier dans /tmpou $TMPDIR).
m
J'ai utilisé la méthode de votre réponse pour ma objdumpsituation. Fait intéressant, cela n'a fonctionné que pour moi gcc -o /dev/fd/9 [ . . . ], pas avec gcc >&9 -o - [ . . . ]. J'allais écrire une réponse (pas à la situation objdump, mais pour une situation non sensible à null) qui utilisait un document ici avec une substitution de commande, mais j'ai vu que vous aviez déjà mentionné une chaîne ici dans les commentaires de la question , ce qui est encore mieux.
clacke