Возможность записи в stdout, но не в файл

Возможность записи в stdout, но не в файл

Я хочу сохранить след посещенного мной URL-адреса, поэтому использую следующую командную строку:

tcpdump -ien1 -v -X 'tcp порт 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe 's/(GET|POST).(.?).HTTP/1....Хост:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL"

Работает нормально, один URL на строку. Но если я сделаю

tcpdump -ien1 -v -X 'tcp порт 80' | sed -nl 's/^.0x[0-9a-f]{4}:.{43}(.)$/\1/p' |perl break.pl |perl -pe 's/(GET|POST).(.?).HTTP/1....Хост:.([a-zA-Z._0-9-])../"\nBEGURL ".localtime().": $1 http://$3$2\n"/ge' | grep "^BEGURL">> /tmp/out

(обратите внимание на конец >> /tmp/out) Тогда файл пуст! Знаете почему? Для меня это совершенно нелогично.

Я также пробовал перенаправить stdout и stderr в /tmp/out, он все еще пуст. Файл имеет доступ на запись. Понятия не имею, что это может быть. Есть ли что-то еще, кроме stdout и stderr??

за любую помощь.

решение1

Вы можете иметь в виду, что уже пробовали это, когда говорите: «Я также пробовал перенаправить stdout и stderr в /tmp/out», но это кажется наиболее вероятной проблемой: поэтому попробуйте добавить 2>&1 в конец.

Если нет, то для облегчения отладки попробуйте добавить 2>/dev/null к первой команде и посмотрите, получите ли вы по-прежнему вывод.

Также, можете ли вы упростить команду для тестирования? Например, это работает:

tcpdump -ien1 -v -X 'tcp port 80' >> /tmp/out

решение2

У меня была та же проблема всего несколько дней назад. Попробуйте использовать -wопцию, чтобы записывать пакеты в файл. Для получения дополнительной информации см. man tcpdump.

Связанный контент