Linux 在网络命名空间中运行多个命令
我想在一个单独的步骤中在网络名称空间中运行一系列串联的bash命令,但似乎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 。。。将返回网络命名空间和主机上的接口 有没有办法让它发挥作用 只讨
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