我想在一个步骤中在网络命名空间中运行一系列连接的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只谈到一个命令,这不是一个好兆头......
答案 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&