【问题标题】:Run multiple commands in network namespace在网络命名空间中运行多个命令
【发布时间】:2017-08-05 22:33:47
【问题描述】:

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

【问题讨论】:

    标签: linux bash namespaces ip linux-namespaces


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      root@7fb1cd095b91:# ip netns exec $NSNAME unshare --fork --pid --mount-proc /bin/bash -e

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

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

      【讨论】:

        猜你喜欢
        • 2011-07-05
        • 1970-01-01
        • 2012-03-13
        • 2016-05-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-12
        相关资源
        最近更新 更多