sostituzione del processo bash con file temporaneo


8

Alcuni programmi richiedono che i loro file siano ricercabili, ad esempio 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

Sarebbe conveniente che i file temporanei vengano sostituiti da processi.

Riesco a vedere nella pagina man che bash può eseguire il fallback a file temporanei con sostituzione del processo, ma posso chiedergli esplicitamente di usare file temporanei?

Come 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

Ne dubito, ma puoi sempre usare mktemp.
Wildcard

1
Forse dovresti provare a compilare bashcon HAVE_DEV_FDset su 0.
cuonglm,

6
È possibile invece utilizzare una stringaobjdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
cercabile

2
Ops. La versione stringa qui rilascia silenziosamente il carattere null!
Meuh

1
@Wildcard con Fifo non è possibile con objdump, questo è il punto centrale della domanda. Altrimenti <()era abbastanza buono.
Elazar Leibovich,

Risposte:


2

Basato sul commento di meuh; apparentemente bash qui-le stringhe possono essere abusate come file temporanei, prova questo:

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

Il trucco è che qui i documenti e qui le stringhe usano file temporanei sotto il cofano (sostituisci objdump ...con stat /dev/fd/9per vedere, non sarà un FIFO problematico o una pipe, ma un link simbolico a un file in /tmpo $TMPDIR).
mr.spuratic,

Ho usato il metodo della tua risposta per la mia objdumpsituazione. È interessante notare che ha funzionato solo con me gcc -o /dev/fd/9 [ . . . ], non con gcc >&9 -o - [ . . . ]. Stavo per scrivere una risposta (non alla situazione di objdump, ma per una situazione non sensibile a null) che utilizzava un documento qui con una sostituzione di comando, ma poi ho visto che avevi già menzionato una stringa qui nei commenti alla domanda , che è ancora meglio.
clacke,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.