Чтобы выполнить то, что вы описали, сначала вам нужно настроить хост Mac OS X для работы в качестве маршрутизатора между сетями 192.168.1.0/24 и 192.168.3.0/24.
Для этого вы должны включить переадресацию на этой машине, что вы можете сделать с помощью этой команды:
$ sudo sysctl -w net.inet.ip.forwarding=1
Вы также можете добавить эту конфигурацию в /etc/sysctl.conf, чтобы она сохранялась при перезагрузке.
Как только это будет сделано, вам необходимо настроить маршруты для обеих сторон, чтобы они знали, куда идти для машин другой сети.
Например, в вашем Wi-Fi-маршрутизаторевам следует настроить статический маршрут для 192.168.3.0/24, используя в качестве шлюза IP-адрес вашего Mac OS X в сети 192.168.1.0/24. Таким образом, когда другие машины в сети Wi-Fi отправляют трафик на 192.168.3.x, маршрутизатор перенаправляет его на ваш блок OS X (, который направляет его на другой интерфейс, поскольку переадресация включена.)
На вашем устройстве в сети 192.168.3.0/24 вам может потребоваться выполнить аналогичную настройку, настроив статический маршрут для доступа к сети 192.168.1.0/24 через IP-адрес вашего устройства Mac OS X в сети 192.168.3.0. /24 сети. (Этот последний маршрут может быть ненужным, если ваша Mac OS X уже является шлюзом по умолчанию для этой машины, и в этом случае все пакеты уже направляются на нее в любом случае.)
Способ настройки этих маршрутов будет зависеть от ОС или программного обеспечения, работающего на другом устройстве и маршрутизаторе Wi-Fi... Просмотрите их руководства и посмотрите, не найдете ли вы какие-либо ссылки по настройке статических маршрутов.
Если вы запустите его как часть канала, стандартный ввод не будет связан с терминалом, как уже сказал @Stephen Kitt. Но если вы запустите его позже, он не запустится, пока сервер http -не завершит работу.
В качестве обходного пути можно использовать циклwhile
-с grep
вызовом каждой строки:
http-server | while read line; do
echo "$line" | grep "Server running" && { interactiveProgram; break; }
done
Подозреваю, проблема в том, что с
http-server | (grep -m 1 "Server running"; interactiveProgram)
Стандартный вводinteractiveProgram
не подключается к терминалу, а направляется из стандартного вывода http-server
(после того, как grep
закончит с ним ).
http-server | (grep -m 1 "Server running"; interactiveProgram < /dev/tty)
должен делать то, что вам нужно.