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

Run multiple commands in network namespace

我想 运行 网络命名空间中的一系列串联 bash 命令一步到位,但似乎 ip netns exec mynetns 只需要一个 bash 命令作为参数。 例如:

ip netns exec mynetns ip a

...按预期工作。

ip netns exec mynetns "ip a ; ip a"

...returns exec of "ip a" failed: No such file or directory.

显然,

ip netns exec mynetns ip a ; ip a

... 将 return 网络命名空间和主机上的接口。

有没有办法让它起作用?

manual只讲了一个命令,这不是什么好兆头...

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

没关系,这只是意味着您需要明确地制作 bash 命令。这应该有效:

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

我在我的代码中使用了以下方法。

1: 按照以下方式使用批处理所有 shell 命令。 请注意 space/tab 等,因为批处理对此非常敏感。 PS:我正在使用取消共享来使用多个名称空间隔离,这是可选的。 用它来提供有关各种名称空间隔离的更多想法。

root@7fb1cd095b91:# ip netns exec $NSNAME unshare --fork --pid --mount-proc /bin/bash -e <<开始 阅读链接 /proc/self /bin/bash 阅读链接 /proc/self ls -lrt 开始

2:第二次在某些脚本中使用相同的命令并直接调用该脚本,然后内联批处理 bash 命令。

root@7fb1cd095b91:#ip netns exec $NSNAME unshare -mpf --mount-proc --fork /bin/bash -c /tmp/start_ns.sh&