Я думаю, что документация Bash несколько вводит в заблуждение по этой теме. Глядя на код, даже возвращаясь к версии 2.04, где были введены перенаправления в сети, /dev/tcp
и /dev/udp
работает следующим образом:
- во время сборки
configure
скрипт проверяет, поддерживаются ли различные сетевые функции; если это так, если сетевое перенаправление включено (что имеет место по умолчанию), встроенный внутренний сетевой код;
- во время выполнения, если внутренний сетевой код встроен
/dev/tcp
и /dev/udp
(в правильном формате) обрабатывается внутренне; в противном случае выдается предупреждение («/ dev / (tcp | udp) / хост / порт не поддерживается без подключения к сети»), и Bash пытается открыть указанный путь в системе;
- если сетевые перенаправления настроены, ничего особенного не делается.
То, к чему это сводится, является:
- если перенаправление сети включено:
- поддерживается ли сеть на целевой платформе
/dev/tcp
и /dev/udp
всегда будет обрабатываться внутри организации;
- в противном случае Bash предупредит и попытается открыть файл «вслепую»; если система каким-то образом поддерживает
/dev/(tcp|udp)/host/port
, то будет использоваться, иначе, по всей вероятности, перенаправление не удастся;
- если перенаправление сети отключено, специальная обработка не выполняется; как указано выше, если система каким-либо образом поддерживает
/dev/(tcp|udp)/host/port
, то будет использоваться, иначе, по всей вероятности, перенаправление не удастся.
/dev/tcp
существует в некоторых системах, но, насколько я знаю, никто не поддерживает ту же абстракцию, что и Bash. На Solaris /dev/tcp
используется с ndd
инструментом для запроса и изменения конфигурации сети. В XTI (см. Также «Открытая группа», если вы член) эту t_open
функцию можно использовать /dev/tcp
для открытия TCP-соединения, но она не использует настройку на основе пути, есть отдельная структура данных для указания целевого хоста и порт (и другие параметры).
/dev
Это tmpfs на текущих Linux, и он был в корневом разделе в старых. Вот почему это невозможно в настоящее время. Это можно легко сделать с помощью расширения sysfs или procfs (оба fs очень гибкие и похожие (на самом деле, вероятно, никто не знает, почему они не одинаковые)), никто не делает это сегодня, но это можно сделать примерно за 100 строки кода.