Изman bash
:
The shell waits for all commands in the pipeline to terminate before returning a value.
У меня не установлен докер, но, возможно, попробуйте это:
awk '/Listening on / {print $3; exit 0;}' <( sudo docker logs -f <id> )
Или вы можете попробовать это:
sudo docker logs -f <id> | (awk '/Listening on / {print $3; exit 0;}'; pkill -P $$ )
Так что, возможно, объяснение того, что происходит, поможет. Я предполагаю, что команда «docker logs» обычно не выходит из (после -f ==? ).
Первоначальная проблема возникает из-за того, что конвейер не завершается после завершения работы awk -это происходит потому, что конвейер все еще находится в ожидании в программе docker (см. мой отрывок из справочной страницы bash выше ).
pkill просто убивает все, что имеет родительский идентификатор $$ -т.е. в этот момент это просто докер.
Очевидно, было бы не очень хорошей идеей отбрасывать эту команду в фоновый режим с помощью '&', а затем запускать другие вещи -они также были бы убиты!