IFS=\;; set -- $IFS; echo $#; echo "$*"
1
;
IFS=; set -- $IFS; echo $#; echo "$*"
0
#there doesn't seem to be anything here
Как видно - $IFS
в первом случае не пуст - он содержит ровно один разделитель полей.
Когда оболочка разворачивает нецитируемую переменную, она разделяет ее значение на разделители, определенные в $IFS
. Таким образом, каждая переменная потенциально является массивом, разделенным $IFS
. По умолчанию $IFS
установлен в <пространство>
, \t
ab, и \n
ewline. Каждая из них обладает особыми свойствами в $IFS
, так как это $IFS
белый пробел. $IFS
разделители пробела не сохраняются, и каждая последовательность обоих усекается до одного поля, когда оболочка выполняет словоразделение, в то время как все остальные разделяют одно поле на разделитель. $IFS
пробелы также будут полностью удалены из начала или конца поля. Например:
IFS=/; slashes=///////; printf '<%s>' $slashes
<><><><><><><>
IFS=' '; spaces=' '; printf '<%s>' $spaces
<>
printf '<%s>' $spaces$slashes
<///////>
Но $IFS
пробела очевидно не удаляется, когда в не в $IFS
:
IFS=/; printf '<%s>' $spaces$slashes
< ><><><><><><>
В дополнение к предыдущему ответу попробуйте добавить правило, разрешающее трафик UDP, как в предыдущем ответе, и TCP-соединение, как это:
# iptables -A INPUT -p tcp --sport 53 -j ACCEPT
TCP-соединение используется, когда размер данных ответа превышает 512 байт , это нормально.
Я не вижу правила, чтобы разрешить UDP Port 53. Без порта 53 UDP вы не получаете DNS, поэтому не удивительно, что разрешение имени не удается.
Вам нужно добавить правило, чтобы разрешить входящий трафик UDP из порта 53, по крайней мере, с сервера DNS (ы) ваших поставщиков доступа в Интернет. Что-то вроде
iptables -A INPUT -p udp --sport 53 -j ACCEPT
, возможно, с дополнительными ограничениями, возможно, в другом правиле (я не понимаю организацию вашего брандмауэра). Поскольку ваши правила брандмауэра, похоже, были автоматически сгенерированы автоматически, вы, вероятно, захотите изменить настройки инструмента настройки брандмауэра, а не вызова IPTables
напрямую.