2

我想一步在网络命名空间中运行一系列连接的 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

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

有没有办法让它工作?

手册只讲了一个命令,这不是一个很好的迹象......

4

2 回答 2

8

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

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

ip netns exec mynetns bash -c "ip a ; ip a"
于 2017-03-15T09:56:08.930 回答
0

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

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

root@7fb1cd095b91:# ip netns exec $NSNAME unshare --fork --pid --mount-proc /bin/bash -e <<START readlink /proc/self /bin/bash readlink /proc/self ls -lrt START

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

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

于 2020-06-21T14:45:10.003 回答