Ваш файл пуст, потому что процесс прерван до того, как файл будет записан на диск. Так работает перенаправление. В качестве обходного пути попробуйте следующее:
script -c 'cat /dev/urandom|hexdump|grep -i "ffff f"' -f random
Это будет в основном записывать весь экранный файл в файл.
Проблема с вашим watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2', я думаю, заключается в том, что он запускает tail -n 15 /var/log/syslog внутри watch, а затем передает результат на grep. Это почти наверняка вызывает буферизацию промежуточного вывода таким образом, что вы не видите того, что ожидаете (по крайней мере, не тогда, когда вы этого ожидаете).
Возможно, есть способ достичь того, чего вы хотите с умным использованием опции stdbuf и / или --line-buffered grep, однако более простой способ - запустить весь конвейер внутри watch:
watch -n 1 'tail -n 15 /var/log/syslog | grep -v -E "pattern1|pattern2"'
Проблема с вашим watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2', я думаю, заключается в том, что он запускает tail -n 15 /var/log/syslog внутри watch, а затем передает результат на grep. Это почти наверняка вызывает буферизацию промежуточного вывода таким образом, что вы не видите того, что ожидаете (по крайней мере, не тогда, когда вы этого ожидаете).
Возможно, есть способ достичь того, чего вы хотите с умным использованием опции stdbuf и / или --line-buffered grep, однако более простой способ - запустить весь конвейер внутри watch:
watch -n 1 'tail -n 15 /var/log/syslog | grep -v -E "pattern1|pattern2"'
Проблема с вашим watch -n 1 tail -n 15 /var/log/syslog | grep -v -E 'pattern1|pattern2', я думаю, заключается в том, что он запускает tail -n 15 /var/log/syslog внутри watch, а затем передает результат на grep. Это почти наверняка вызывает буферизацию промежуточного вывода таким образом, что вы не видите того, что ожидаете (по крайней мере, не тогда, когда вы этого ожидаете).
Возможно, есть способ достичь того, чего вы хотите с умным использованием опции stdbuf и / или --line-buffered grep, однако более простой способ - запустить весь конвейер внутри watch:
watch -n 1 'tail -n 15 /var/log/syslog | grep -v -E "pattern1|pattern2"'