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 zsh
l » =()
.
$ 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
la source
la source
mktemp
.bash
avecHAVE_DEV_FD
set to0
.objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
objdump
, c'est tout le point de la question. Sinon,<()
c'était assez bien.Réponses:
Basé sur le commentaire de meuh; apparemment bash ici-les chaînes peuvent être utilisées abusivement en tant que fichiers temporaires, essayez ceci:
la source
objdump ...
parstat /dev/fd/9
pour voir, ce ne sera pas un FIFO ou un pipe problématique, mais un lien symbolique vers un fichier dans/tmp
ou$TMPDIR
).objdump
situation. Fait intéressant, cela n'a fonctionné que pour moigcc -o /dev/fd/9 [ . . . ]
, pas avecgcc >&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.