Вы можете увидеть foo
, отображаемый до бара
, после стержень
или даже после подсказки, в зависимости от времени. Добавьте немного задержки, чтобы получить последовательное время:
$ echo foo > >(sleep 1; cat); echo bar; sleep 2
bar
foo
$
PAR
появляется немедленно, затем FOO
через секунду, затем следующая подсказка через еще одна секунда.
Что происходит, так это то, что Bash выполняет замены процесса на заднем плане.
Сон 1; Cat
и устанавливает трубку к ней. Echo Foo
. Поскольку это не заполняет буфер трубы, команда ECHO
завершается без блокировки. эхо-бар
. Сон 2
. Сон 1
. сон 1
возвращается в подпроцесс. Подпрокат продолжает выполнять CAT
. CAT
копирует свой вход на свой выход (который отображается на экране) и возвращает. Сон 2
Возвращает. Основной процесс оболочки завершается выполнением, и вы можете увидеть следующую подсказку. Решение найдено здесь
, предполагающее использовать 10.1.1.133/24 и 10.1.1.1 в качестве шлюза
на хосте, который я использовал
ip addr del 10.1.1.133/24 dev eth0
ip link add link eth0 dev eth0m type macvlan mode bridge
ip link set eth0m up
ip addr add 10.1.1.133/24 dev eth0m
route add default gw 10.1.1.1
В контейнере, который я использовал
CID=$(docker run -d ...)
pipework eth0 $CID 10.1.1.133/24@10.1.1.1