замена процесса 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<<<''

Хитрость в том, что здесь документы и здесь строки используют временные файлы под капотом (замените objdump ...на, stat /dev/fd/9чтобы увидеть, что это будет не проблемный FIFO или канал, а символическая ссылка на файл в /tmpили $TMPDIR).
mrsspuratic

Я использовал метод вашего ответа для моей objdumpситуации. Интересно, что он работал только для меня gcc -o /dev/fd/9 [ . . . ], а не с gcc >&9 -o - [ . . . ]. Я собирался написать ответ (не для ситуации objdump, а для ситуации, не чувствительной к нулю), в которой использовался документ here с подстановкой команд, но потом я увидел, что вы уже упомянули строку here в комментариях вопроса , что даже лучше.
Clacke
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.