substitusi proses bash dengan file sementara

8

Beberapa program memerlukan file mereka agar dapat dicari, misalnya diperlukan 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

Akan lebih mudah untuk memiliki proses substitusi menggunakan file sementara.

Saya dapat melihat di halaman manual bahwa bash dapat mundur ke file sementara dengan substitusi proses, tetapi bisakah saya secara eksplisit memintanya untuk menggunakan file sementara?

Seperti 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
Elazar Leibovich
sumber
Saya ragu, tapi Anda selalu bisa menggunakannya mktemp.
Wildcard
1
Mungkin Anda harus mencoba kompilasi bashdengan HAVE_DEV_FDset to 0.
cuonglm
6
Anda dapat menggunakan string yang dapat dicari di sini sebagai gantinya:objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh
2
Ups. Versi string di sini diam-diam menjatuhkan null char!
meuh
1
@Wildcard menggunakan fifo tidak mungkin dengan objdump, itulah inti dari pertanyaan. Kalau tidak, <()itu cukup baik.
Elazar Leibovich

Jawaban:

2

Berdasarkan komentar meuh; ternyata bash di sini-string dapat disalahgunakan sebagai file sementara, coba ini:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
bernardelli
sumber
Kuncinya adalah bahwa di sini mendokumentasikan dan di sini string menggunakan file - file sementara di bawah tenda (ganti objdump ...dengan stat /dev/fd/9untuk melihat, itu tidak akan menjadi FIFO atau pipa yang bermasalah, tetapi sebuah symlink ke sebuah file di dalam /tmpatau $TMPDIR).
mr.spuratic
Saya menggunakan metode jawaban Anda untuk objdumpsituasi saya . Menariknya, itu hanya bekerja untuk saya gcc -o /dev/fd/9 [ . . . ], bukan dengan gcc >&9 -o - [ . . . ]. Saya akan menulis jawaban (bukan untuk situasi objdump, tetapi untuk situasi non-nol-sensitif) yang menggunakan dokumen di sini dengan substitusi perintah, tapi kemudian saya melihat bahwa Anda telah menyebutkan string di sini di komentar pertanyaan , yang bahkan lebih baik.
clacke