3

例如,Ubuntu lxc-start-ephemeralbash 脚本执行以下操作来检测正在启动的容器的 IP 地址:

# Grab all the public globally routed IPv4 and IPv6 addresses
(sudo ip netns exec $NAME ip -4 addr show scope global && \
 sudo ip netns exec $NAME ip -6 addr show scope global) | grep inet | while read line; do
    ip=$(echo $line | awk '{print $2}' | cut -d '/' -f1)
    echo "$ip"
done

我个人不太喜欢这种方法,因为它需要大量摆弄字符串和输出。是否有一个编程 API 来访问相同的信息(不一定在 bash 中),或者它是否是“正确的方式”来总是使用类似的工具ip,并希望您的解析不会与同一工具的其他版本中断?

4

3 回答 3

2

还要考虑/sys(sysfs),例如/sys/class/net/<device name>/...

于 2015-01-07T13:02:42.897 回答
1

在 shell 脚本中,您倾向于通过解析文本来访问数据。这主要是因为 shell 代码只能真正操作字符串,还因为文本比二进制表示更便携。

但是,通常有 UI 命令和 API 命令,shell 脚本应该使用后者而不是前者。例如,您应该调用stat而不是尝试解析ls -l输出。或者可能有一个文件/proc包含您想要的信息,因此您根本不必运行命令 - 但该文件中的数据仍将是文本形式。

所以,是的 - 当您编写 shell 脚本时,您基本上会被困在为所有内容解析文本。

于 2013-02-20T02:34:58.367 回答
0

使用 Proc 文件系统

如果您只是想要一种不同的方式来解析您的 IP 地址,您可以/proc/net/arp直接解析。你仍然需要解析出你想要的数据,但是只有当 Linux 内核改变了 proc 文件系统时,数据的格式才会改变。对于大多数目的来说,这似乎足够稳定,恕我直言。

于 2013-02-20T00:31:58.937 回答