Я запускаю это:
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
Используйте --line-buffered
опция для grep
(и также избавьтесь от бесполезного 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
, это будет grep
в первых 1 000 000 строк вывода и пишет результат в файл.
Необходимо будет записать вывод cat /dev/urandom | hexdump
в файл перед выполнением его в следующий раз. Сценарий ниже должен выполнить то, что Вы пробуете:
cat /dev/urandom | hexdump |
while IFS= read -r line; do
printf '%s\n' "$line" >> random;
done
IFS
используется для разделения вывода на строки здесь.