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

让进程替换使用临时文件会很方便。

我可以在手册页中看到bash可以通过进程替换回退到临时文件,但是我可以明确要求他使用临时文件吗?

喜欢zsh=()

$ 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
通配符

1
也许您应该尝试bash使用HAVE_DEV_FDset进行编译0
cuonglm '16

6
您可以使用此处可搜索的字符串代替:objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
meuh '16

2
哎呀。在这里串的版本会丢弃空字符!
meuh

1
@fildcard不能使用fifo objdump,这就是问题的全部。否则<()就足够了。
Elazar Leibovich

Answers:


2

根据meuh的评论;显然bash here-strings可以作为临时文件被滥用,请尝试以下操作:

( 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)。
ms.spuratic '16

我根据情况使用了您答案的方法objdump。有趣的是,它仅对我有用gcc -o /dev/fd/9 [ . . . ],而对不起作用gcc >&9 -o - [ . . . ]。我要写一个答案(不是针对objdump的情况,而是针对非空敏感的情况),该命令使用here文档替换命令,但随后我看到您已经在问题注释中提到了here字符串,甚至更好。
clacke
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.