замена процесса bash временным файлом

8

Некоторым программам нужны их файлы для поиска, например 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

Было бы удобно иметь подстановку процесса, используя временные файлы.

На странице руководства я вижу, что bash может использовать временные файлы с заменой процесса, но могу ли я явно попросить его использовать временные файлы?

Как 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
Элазар Лейбович
источник
Я сомневаюсь в этом, но вы всегда можете использовать mktemp.
Уайлдкарт
1
Может быть, вам стоит попробовать скомпилировать bashс HAVE_DEV_FDset to 0.
cuonglm
6
Вместо этого вы можете использовать искомую строку :objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh
2
К сожалению. Здесь строка версия тихо падает нулевой символ!
meuh
1
@ Wildcard с использованием fifo невозможно objdump, вот и весь вопрос. В противном случае <()было достаточно хорошо.
Элазар Лейбович

Ответы:

2

Основано на комментарии Меух; очевидно, bash here-строки могут быть использованы как временные файлы, попробуйте это:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
Bernardelli
источник
Хитрость в том, что здесь документы и здесь строки используют временные файлы под капотом (замените objdump ...на, stat /dev/fd/9чтобы увидеть, что это будет не проблемный FIFO или канал, а символическая ссылка на файл в /tmpили $TMPDIR).
mrsspuratic
Я использовал метод вашего ответа для моей objdumpситуации. Интересно, что он работал только для меня gcc -o /dev/fd/9 [ . . . ], а не с gcc >&9 -o - [ . . . ]. Я собирался написать ответ (не для ситуации objdump, а для ситуации, не чувствительной к нулю), в которой использовался документ here с подстановкой команд, но потом я увидел, что вы уже упомянули строку here в комментариях вопроса , что даже лучше.
Clacke