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

时间:2017-03-15 09:19:07

标签: 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"

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

显然,

ip netns exec mynetns ip a ; ip a

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

有没有办法让它发挥作用?

manual只谈到一个命令,这不是一个好兆头......

2 个答案:

答案 0 :(得分:5)

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

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

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

答案 1 :(得分:0)

我在代码中使用以下方式。

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

root @ 7fb1cd095b91:#ip netns exec $ NSNAME取消共享--fork --pid --mount-proc / bin / bash -e << START readlink / proc / self / bin / bash readlink / proc / self ls -lrt 开始

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

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