私はこれを実行しています:
cat /dev/urandom|hexdump| grep -i "ffff f" > random
ファイルrandom
に何も表示されません。コマンドが中断された後、長さはゼロのままです。
出力をファイルに書き込む方法
次のような出力データを含むファイルに結果を書き込む必要があります。
021bc40 7724 d4f5 59ec bcbb ffff fd26 ab3c 9b7c
03a9100 b3a5 8601 fa33 ffff f23c 4326 2e7f 0c8a
0449810 e459 d5af 4e11 ffff fc55 8660 9efb 3c9b
grep
に--line-buffered
オプションを使用します(また、役に立たないcat
を取り除きます):
hexdump /dev/urandom | grep --line-buffered -i "ffff f" > random
この方法では、出力はバッファリングされず、すべての行がすぐにrandom
に入れられます。パイプでtee
を使用して、生成された行数を確認することもお勧めします。
hexdump /dev/urandom | grep --line-buffered -i "ffff f" | tee random
ファイルがディスクに書き込まれる前にプロセスが中断されるため、ファイルは空です。これがリダイレクトの仕組みです。回避策として、これを試してください:
script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random
これは基本的にすべての画面出力をファイルに書き込みます。
cat /dev/urandom|hexdump
またはhexdump /dev/urandom
は、stdoutに継続的に書き込みます。 Ctrl+C この後は何も実行されません。ただし、head
を使用して出力を制限できます
hexdump /dev/urandom | head -n1000000 | grep "ffff f" > random
これにより、出力の最初の1000000行でgrep
が実行され、結果がファイルに書き込まれます。
次回実行する前に、cat /dev/urandom | hexdump
の出力をファイルに書き込む必要があります。以下のスクリプトは、あなたがしようとしていることを達成するはずです。
cat /dev/urandom | hexdump |
while IFS= read -r line; do
printf '%s\n' "$line" >> random;
done
IFS
は、ここで出力を行に分割するために使用されます。