Так что я заработал, просто используя несколько интерфейсов, сопоставляя каждый интерфейс виртуальной машины с пространством имен. И тогда я смог использовать исходный порт 63999 одновременно в 2 одновременных сеансах
.ip netns eng51 ifconfig eth1.51 Link encap :Ethernet HWaddr 52 :54 :00 :bd :68 :c3 inet addr :51.51.1.10 Bcast :51.51.1.255 Маска :255.255.255.0
ip netns exec eng52 ifconfig eth2.52 Link encap :Ethernet HWaddr 52 :54 :00 :bd :68 :c3 inet addr :51.51.2.10 Bcast :51.51.2.255 Маска :255.255.255.0
ip netns exec eng522 ifconfig eth3.522 Link encap :Ethernet HWaddr 52 :54 :00 :bd :68 :c3 inet addr :51.51.2.10 Bcast :51.51.2.255 Маска :255.255.255.0
ip netns exec eng511 ifconfig eth4.511 Link encap :Ethernet HWaddr 52 :54 :00 :bd :68 :c3 inet addr :51.51.1.10 Bcast :51.51.1.255 Маска :255.255.255.0
Предполагая, что файловый дескриптор 3 еще не используется:
#!/bin/bash
exec 3>/dev/tty
#exec 3>/dev/null
echo "hello" >&3
Вы открываете fd 3 на /dev/tty
или /dev/null
, легко переключается. Затем вы заменяете все > /dev/tty
на >&3
.
Решением вне сценария было бы создание пространства имен монтирования (man unshare
), выполнение mount --bind /dev/null /dev/tty
в нем, а затем запуск там немодифицированного сценария.