bash işleminin geçici dosyayla değiştirilmesi


8

Bazı programların dosyalarının aranabilir olması gerekir, örneğin 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

Süreç ikamesinin geçici dosyalar kullanması uygun olacaktır.

Man sayfasında bash'ın işlem değiştirme ile geçici dosyalara geri dönebileceğini görebiliyorum, ancak açıkça geçici dosyaları kullanmasını isteyebilir miyim?

Beðen zsh'ın =().

$ 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

Bundan şüphe ediyorum, ama her zaman kullanabilirsiniz mktemp.
Wildcard

1
Belki derleme denemelisiniz bashile HAVE_DEV_FDkarşı sette 0.
cuonglm

6
Bunun yerine aranabilir bir dize kullanabilirsiniz :objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh

2
Hata. Burada dize sürümü sessizce boş char, damla!
meuh

1
@ Fifo kullanarak Wildcard ile mümkün değil objdump, sorunun tüm mesele bu. Aksi takdirde <()yeterince iyiydi.
Elazar Leibovich

Yanıtlar:


2

Meuh'un yorumuna dayanarak; görünüşe göre burada dizeleri geçici dosyalar olarak kötüye kullanılabilir, bunu deneyin:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''

Hile olduğunu burada belgeler ve burada dizeleri geçici dosyaları kullanmak başlık altında (replace objdump ...ile stat /dev/fd/9, bu sorunlu FIFO veya boru ama bir dosyaya bir sembolik olmayacak görmek /tmpveya $TMPDIR).
mr.spuratic

Durumum için cevap yöntemini kullandım objdump. İlginçtir, sadece benim için çalıştı gcc -o /dev/fd/9 [ . . . ], değil gcc >&9 -o - [ . . . ]. Komut ikamesi olan bir burada belge kullanan bir cevap (objdump durumuna değil, null'a duyarlı olmayan bir durum için) yazacaktım, ancak daha sonra soru yorumlarında burada bir dizeden bahsettiğinizi gördüm daha da iyi.
clacke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.