Вы можете изолировать свой процесс в отдельном пространстве IP-имен (см.man ip-netns
). Тогда не имеет значения, к какому порту он привязан, потому что вам все равно придется перенаправлять туда весь трафик.
Для внешнего мира это будет выглядеть так, как если бы процесс использовал правильные порты (не для netstat
, а для установленных соединений ).
Вам не хватает того, что вы открываете (и усекаете )файл f
только один раз в вызове exec
. Две команды echo
просто пишут в уже открытый файловый дескриптор. Таким образом, файл f
не будет усечен ни одним из вызовов echo
.
Для перенаправления стандартного вывода на файловый дескриптор используется следующий синтаксис >&n
где n
— небольшое положительное целое число, обозначающее файловый дескриптор (нет >>&n
перенаправления ). Чтобы это работало, дескриптор файла уже должен быть связан с открытым файлом. Это действие по открытию файла и связывание его с дескриптором с exec 3>f
, который усекает файл(exec 3>>f
не усекает файл и открывает его в режиме добавления -). Просто запись с помощью >&3
не открывает файл и не обрезает его.
Все было бы иначе, если бы ты
echo foo >f
echo bar >f
cat f
(каждый echo
открывает и усекаетf
)или, более запутанный,
exec 3>f; echo foo >&3
exec 3>f; echo bar >&3
exec 3>&- # close fd 3
cat f
(файл открывается и усекается exec
перед каждымecho
).