我想在一个步骤中以网络名称空间运行一系列串联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
...将返回网络名称空间和主机计算机中的接口。
有没有办法使它起作用?
手册仅谈论一个命令,这不是一个很好的迹象...
netns exec正在运行命令,而不是bash命令:它正在执行具有参数本身的过程。
没关系,这只是意味着您需要明确地将Bash命令。这应该有效:
ip netns exec mynetns bash -c "ip a ; ip a"
我正在使用代码中的以下方式。
1:以按照方式使用批处理所有壳命令。请注意空间/标签等,因为批处理非常敏感。PS:我使用的是使用Unshare的多个命名空间隔离,这是可选的。用它来给出各种命名空间隔离的其他想法。
root@7fb1cd095b91:#ip netns exec $ nsname unshare -fork - -pid -mount -proc/bin/bash -e<readlink/proc/self/bin/bashreadlink/proc/selfLS -LRT开始
2:第二次使用某些脚本中的相同命令,然后直接调用该脚本,然后批量bashing bash命令内联。
root@7fb1cd095b91:#ip netns exec $ nsname unshare -mpf -mount -proc -mount -proc -fork/bin/bash/bash/bash -c/tmp/start_ns.shs.sh.sh&