Bash-Prozess-Ersetzung durch temporäre Datei

8

Bei einigen Programmen müssen die Dateien beispielsweise durchsuchbar sein 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

Es wäre praktisch, wenn die Prozessersetzung temporäre Dateien verwendet.

Ich kann auf der Manpage sehen, dass Bash auf temporäre Dateien mit Prozessersetzung zurückgreifen kann, aber kann ich ihn ausdrücklich bitten, temporäre Dateien zu verwenden?

Wie 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
quelle
Ich bezweifle es, aber Sie können immer verwenden mktemp.
Wildcard
1
Vielleicht sollten Sie versuchen, bashmit HAVE_DEV_FDset to zu kompilieren 0.
Cuonglm
6
Sie könnten stattdessen eine hier suchbare Zeichenfolge verwenden:objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh
2
Hoppla. Die hier String- Version lässt das Null-Zeichen stillschweigend fallen!
Meuh
1
@Wildcard mit fifo ist mit nicht möglich objdump, das ist der springende Punkt der Frage. Ansonsten <()war gut genug.
Elazar Leibovich

Antworten:

2

Basierend auf Meuhs Kommentar; Anscheinend können bash here-Strings als temporäre Dateien missbraucht werden. Versuchen Sie Folgendes:

( echo 0xea 0x5b 0xe0 0x00 0xf0 | 
  xxd -r -p >/dev/fd/9; objdump -D -b binary -m i8086 /dev/fd/9) 9<<<''
bernardelli
quelle
Der Trick ist, dass hier Dokumente und hier Zeichenfolgen temporäre Dateien unter der Haube verwenden (ersetzen objdump ...durch stat /dev/fd/9, um zu sehen, es ist kein problematisches FIFO oder eine Pipe, sondern ein Symlink zu einer Datei in /tmpoder $TMPDIR).
mr.spuratic
Ich habe die Methode Ihrer Antwort für meine objdumpSituation verwendet. Interessanterweise hat es nur bei mir funktioniert gcc -o /dev/fd/9 [ . . . ], nicht bei gcc >&9 -o - [ . . . ]. Ich wollte eine Antwort schreiben (nicht auf die objdump-Situation, sondern auf eine nicht nullempfindliche Situation), in der ein Here-Dokument mit einer Befehlssubstitution verwendet wurde, aber dann sah ich, dass Sie in den Fragenkommentaren bereits eine Here-Zeichenfolge erwähnt hatten , was noch besser ist.
Clacke