私は最近、デバッグされたプログラムのstdin
を供給するためにgdb
の<<<
のトリックがストリームからヌルバイトをフィルタリングしていることを発見しました。ここでなぜ '<<<'フィルタリングはgdbのnullバイトで、 '<()'はしませんか?
は、それがnullバイトをフィルタリングすることを証言する(誰でも自宅で再現することができるはず)小さな例です:
bashの固有<()
process substitutionを使用すると、NULLバイトを残して、
$> python -c 'print("A\x00" * 10)' | cat -A
A^@A^@A^@A^@A^@A^@A^@A^@A^@A^@$
$> gdb /bin/cat
... gdb license prelude ... snip...
(gdb) r -A <<< $(python -c 'print("A\x00" * 10)')
Starting program: /bin/cat -A <<< $(python -c 'print("A\x00" * 10)')
/bin/bash: warning: command substitution: ignored null byte in input
AAAAAAAAAA$
[Inferior 1 (process 3798) exited normally]
gdb
内のプログラムstdin
に達する:だから
(gdb) r -A < <(python -c 'print("A\x00" * 10)')
Starting program: /bin/cat -A < <(python -c 'print("A\x00" * 10)')
A^@A^@A^@A^@A^@A^@A^@A^@A^@A^@$
[Inferior 1 (process 3804) exited normally]
、私はいつも<<<
と<()
が同じトン程度やっていたことを考えていますヒンジは明らかに間違っています。私は2つの方法の間の違いが何であるかを知っているし、その旨をbash
神秘的なエラーメッセージについての説明がしたい:
/bin/bash: warning: command substitution: ignored null byte in input
すべてのヘルプは歓迎以上です!
開始するために '' <<<文字列の末尾に改行文字を追加します。 – Inian