一時ファイルによる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

プロセス置換で一時ファイルを使用すると便利です。

manページで、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。
— ワイルドカード2016年

1
たぶんbash、をにHAVE_DEV_FD設定してコンパイルしてみてください0。
— cuonglm 2016年

6
あなたはシーク可能使用することができ、ここで文字列を代わりに:objdump -D -b binary -m i8086 /dev/stdin <<<$(echo 0xea 0x5b 0xe0 0x00 0xf0|xxd -r -p)
— meuh

2
おっとっと。ここでは、文字列バージョンは黙ってヌル文字をドロップ!
— meuh 2016年

1
fifoを使用した@ワイルドカードは、では不可能objdumpです。それが問題の核心です。そうでなければ<()十分でした。
— Elazar Leibovich 2016年

回答:


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)。
— mr.spuratic

私はあなたの答えの方法を私のobjdump状況に使用しました。興味深いことに、それはでのみ機能し、では機能しませんgcc -o /dev/fd/9 [ . . . ]でしたgcc >&9 -o - [ . . . ]。hereドキュメントをコマンド置換で使用した回答(objdumpの状況ではなく、nullに依存しない状況の場合)を書きましたが、質問のコメントでhereの文字列をすでに言及していることがわかりました、さらに良いです。
— 16年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.