Почему перенаправление bash в файл происходит в режиме добавления

Вы можете изолировать свой процесс в отдельном пространстве IP-имен (см.man ip-netns). Тогда не имеет значения, к какому порту он привязан, потому что вам все равно придется перенаправлять туда весь трафик.

Для внешнего мира это будет выглядеть так, как если бы процесс использовал правильные порты (не для netstat, а для установленных соединений ).

8
29.09.2019, 20:09
1 ответ

Вам не хватает того, что вы открываете (и усекаете )файл 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).

19
27.01.2020, 20:09

Теги

Похожие вопросы