В руководстве Bash говорится:
If bash is waiting for a command to complete and receives a signal for which a trap has been set, the trap will not be executed until the command completes.
Это означает, что несмотря на то, что сигнал получен bash
, когда вы его отправляете, ваша ловушка на SIGHUP будет вызываться только после окончания cat
.
Если такое поведение нежелательно, используйте либо bash
встроенные функции, (, например. read
+ printf
в цикле вместоcat
)или используйте фоновые задания (см. ответ Стефана).
Подробный способ: установить ACCEPT
all policy для всех подключений перед сбросом:
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
Тогда:
iptables -F
Как указано в комментарии под вопросом, перед сбросом убедитесь, что политики по умолчанию не блокируют вас.
Другой способ — не использовать iptables -F
, а использовать другой файл правил для восстановления базового состояния. На самом деле существует отдельная команда семейства iptables
, которая безопасна в отношении проверки того, не происходит ли такая блокировка. Это iptables-apply
и используется аналогично iptable-restore
, но проверьте его страницы man
на наличие различий и деталей.