Linux 在网络命名空间中运行多个命令

Linux 在网络命名空间中运行多个命令,linux,bash,namespaces,ip,linux-namespaces,Linux,Bash,Namespaces,Ip,Linux Namespaces,我想在一个单独的步骤中在网络名称空间中运行一系列串联的bash命令,但似乎ip netns exec mynetns只使用一个bash命令作为参数。 例如: ip netns exec mynetns ip a …按预期工作 ip netns exec mynetns "ip a ; ip a" …返回“ip a”的执行失败:没有这样的文件或目录 显然, ip netns exec mynetns ip a ; ip a 。。。将返回网络命名空间和主机上的接口 有没有办法让它发挥作用 只讨

我想在一个单独的步骤中在网络名称空间中运行一系列串联的bash命令,但似乎
ip netns exec mynetns
只使用一个bash命令作为参数。 例如:

ip netns exec mynetns ip a
…按预期工作

ip netns exec mynetns "ip a ; ip a"
…返回“ip a”的执行失败:没有这样的文件或目录

显然,

ip netns exec mynetns ip a ; ip a
。。。将返回网络命名空间和主机上的接口

有没有办法让它发挥作用


只讨论了一个命令,这不是一个很好的迹象…

netns exec正在运行一个命令,而不是bash命令:它正在执行一个本身带有参数的进程

没关系,这只是意味着您需要显式地使bash成为命令。这应该起作用:

ip netns exec mynetns bash -c "ip a ; ip a"

我在代码中使用以下方法

1:按以下方式批处理所有shell命令。 请注意空间/标签等,因为批处理对此非常敏感。 PS:我正在使用unshare进行多命名空间隔离,这是可选的。 使用它来提供各种名称空间隔离的额外概念

root@7fb1cd095b91:#ip netns exec$NSNAME unshare--fork--pid--mount proc/bin/bash-e