Сетевой интерфейс Docker0 привинчивается к моей сети

PS1[3]=$SECONDS
PS1='${PS1[!(PS1[1]=!1&(PS1[3]=(PS1[2]=$SECONDS-${PS1[3]})/3600))
   ]#${PS1[3]%%*??}0}$((PS1[3]=(PS1[2]/60%60),  ${PS1[3]})):${PS1[1
   ]#${PS1[3]%%*??}0}$((PS1[3]=(PS1[2]%60),     ${PS1[3]})):${PS1[1
   ]#${PS1[3]%%*??}0}$((PS1[3]=(SECONDS),       ${PS1[3]})):'$PS1

Это обрабатывает форматирование путем вычисления - поэтому, хотя оно и расширяется несколько раз, оно не выполняет никаких подоболочек или каналов.

Он просто обрабатывает $ PS1 как массив и использует более высокие индексы для хранения / вычисления любого / всего необходимого состояния между подсказками. Никакие другие состояния оболочки не затронуты.

00:00:46:[mikeserv@desktop tmp]$
00:00:01:[mikeserv@desktop tmp]$
00:00:00:[mikeserv@desktop tmp]$
00:00:01:[mikeserv@desktop tmp]$
00:00:43:[mikeserv@desktop tmp]$ sleep 10
00:00:33:[mikeserv@desktop tmp]$ sleep 10
00:00:15:[mikeserv@desktop tmp]$
00:00:15:[mikeserv@desktop tmp]$
00:00:02:[mikeserv@desktop tmp]$
00:02:27:[mikeserv@desktop tmp]$

Я могу немного разбить его, может быть ...

Сначала сохраните текущее значение $ SECONDS :

PS1[3]=$SECONDS

Затем определите $ PS1 [0] быть саморекурсивным способом, который всегда будет устанавливать правильные значения для $ PS1 [1-3] , одновременно ссылаясь на себя. Чтобы получить эту часть, вы должны учитывать порядок, в котором вычисляются математические выражения оболочки. Самое главное, что математика оболочки всегда является последним делом для математики оболочки. Прежде всего, оболочка расширяет значения. Таким образом, вы можете ссылаться на старое значение переменной оболочки в математическом выражении после его присвоения с помощью $ .

Вот простой пример:

x=10; echo "$(((x+=5)+$x+x))" "$x"

40 15

Оболочка вычислит этот оператор, сначала подставив значение $ x везде, где используется ссылка $ со знаком доллара, и поэтому выражение становится следующим:

(x+=5)+10+x

... затем оболочка добавляет 5 к значению $ x , а затем расширяет все выражение до x + 10 + x , сохраняя только фактически присвоенное значение в ссылочной переменной.Итак, развернутое значение математического выражения равно 40, но конечное значение $ x равно 15.

В основном так работает уравнение $ PS1 , за исключением того, что там - это еще один уровень математического расширения / оценки, используемый в индексах массивов.

PS1='${PS1[!(PS1[1]=!1&(...))]#...}...'

Я не совсем уверен, почему я решил использовать там PS1 [1] =! 1 - наверное, это было просто глупой эстетикой - но это присваивает 0 $ PS1 [1 ] при расширении для подстановки параметров. Значение побитового И для 0 и всего остального всегда будет 0, но оно не закорачивается, как логическое && , когда крайний левый первичный элемент равен 0, и поэтому выражение в скобках по-прежнему получает оценивается каждый раз. Это, конечно, важно, потому что в этом первом эллипсе устанавливаются начальные значения для $ PS1 [2,3] .

В любом случае, $ PS1 [1] здесь гарантированно равен 0, даже если он изменен между отрисовками подсказок. В скобках ...

PS1[3]=(PS1[2]=$SECONDS-${PS1[3]})/3600

... $ PS1 [2] присваивается разность $ PS1 [3] и $ СЕКУНД , и $ PS1 [3] назначается частное этого значения и 3600. Все значения здесь инициализируются. Итак:

${PS1[1]#${PS1[3]%%*??}0}

... если есть хотя бы две цифры в $ PS1 [3] , то внутреннее расширение там равно нулю, и поскольку мы знаем $ PS1 [1] ] равно 0, тогда, если $ PS1 [3] может быть заменено на ничто, то также будет $ PS1 [1] , иначе он будет расширен до своего значения.Таким образом, только однозначные значения для каждой итерации присваиваний $ PS1 [3] будут расширять начальный ноль, а $ PS1 [3] сам расширяется по модулю 60 сразу после этого, будучи одновременно присваивается следующее последовательно меньшее значение для каждого из часов, минут, секунд.

Промойте и повторяйте до последней итерации, когда $ PS1 [3] будет перезаписано с текущим значением $ SECONDS , чтобы его можно было сравнить с $ SECONDS еще раз, когда подсказка будет нарисована в следующий раз.

3
26.11.2018, 18:24
1 ответ

Похоже, что сеть докеров взаимодействует с вашей хост-сетью. Вам необходимо настроить сеть докера и настроить ее на сеть, отличную от сети вашего хоста, прежде чем запускать докер.

https://docs.docker.com/v17.09/engine/userguide/networking/default_network/custom-docker0/

1
27.01.2020, 21:33

Теги

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