Как выполнить команду после совпадения grep при выводе первой команды

Чтобы выполнить то, что вы описали, сначала вам нужно настроить хост 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... Просмотрите их руководства и посмотрите, не найдете ли вы какие-либо ссылки по настройке статических маршрутов.

0
05.11.2019, 14:44
2 ответа

Если вы запустите его как часть канала, стандартный ввод не будет связан с терминалом, как уже сказал @Stephen Kitt. Но если вы запустите его позже, он не запустится, пока сервер http -не завершит работу.

В качестве обходного пути можно использовать циклwhilegrepвызовом каждой строки:

http-server | while read line; do
    echo "$line" | grep "Server running" && { interactiveProgram; break; }
done
1
28.01.2020, 02:22

Подозреваю, проблема в том, что с

http-server | (grep -m 1 "Server running"; interactiveProgram)
Стандартный ввод

interactiveProgramне подключается к терминалу, а направляется из стандартного вывода http-server(после того, как grepзакончит с ним ).

http-server | (grep -m 1 "Server running"; interactiveProgram < /dev/tty)

должен делать то, что вам нужно.

2
28.01.2020, 02:22

Теги

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