运行 网络命名空间中的多个命令
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&
我想 运行 网络命名空间中的一系列串联 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&