Портативно:
set -f # turn off globbing
IFS='
' # split at newlines only
cmd $(cat <file)
unset IFS
set +f
Или использование подоболочки для создания IFS
и локальные изменения опции:
( set -f; IFS='
'; exec cmd $(cat <file) )
Оболочка выполняет полевое разделение и поколение имени файла на результате переменной или замены команды, которая не находится в двойных кавычках. Таким образом, необходимо выключить поколение имени файла с set -f
, и настройте полевое разделение с IFS
заставить только новые строки разделить поля.
Нет очень, чтобы быть полученным с конструкциями ksh или ударом. Можно сделать IFS
локальный для функции, но нет set -f
.
В ударе или ksh93, можно сохранить поля в массиве, если необходимо передать их нескольким командам. Необходимо управлять расширением в то время, когда Вы создаете массив. Затем "${a[@]}"
расширяется до элементов массива, один на слово.
set -f; IFS=$'\n'
a=($(cat <file))
set +f; unset IFS
cmd "${a[@]}"
С реализацией OpenBSD tcpwrappers
, Я думаю, что необходимо включать каждый из адресов в /etc/hosts.allow
, который, с 10k записями, очень скоро станет очень громоздким.
ALL : ... 78.128.49.0/24 78.128.50.0/24 ... : deny
Это не будет проводить много строк, прежде чем это станет кошмаром для управления. Обратите внимание, что адреса разделяются с пробелами или запятыми или обоими.
Если Вы имеете pf
настроенный и выполнение, Вы могли бы найти легче заполнить таблицу от содержания Вашего файла адреса:
table <blockthese> persist file /etc/list-of-addresses-to-block
block in log quick on $ext_if from <blockthese> to any
Поиски против таблиц в pf
быстры, и таблицы довольно эффективны с точки зрения использования памяти, поэтому если Вы действительно не ограничили суммы RAM на старой машине, это должно работать просто великолепно - это - стратегия, которую я использую на многочисленных хостах FreeBSD, и это работает очень хорошо.