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

Було б зручно, щоб підміна процесу використовувала тимчасові файли.

Я бачу на сторінці man, що bash може повертатися до тимчасових файлів із заміною процесу, але чи можу я прямо попросити його використовувати тимчасові файли?

Як і zsh's =().

$ 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.
Wildcard

1
Можливо, вам слід спробувати компілювати bashз HAVE_DEV_FDвстановленим на 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

На підставі коментаря meuh; мабуть, bash тут-рядки можна зловживати як тимчасові файли, спробуйте це:

( 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).
mr.spuratic

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