如何检测系统是否在UNIX shell脚本中启用了IPv6?

Ale*_*ska 7 unix linux macos shell ipv6

我有一个shell脚本,它正在各种POSIX环境中执行,例如Linux,Mac OSX甚至是Cygwin.该脚本需要可靠地检测给定系统是否启用了IPv6.例如,我至少可以使用IPv6本地环回(:: 1).所以问题是:如何检测系统是否以兼容POSIX的方式在UNIX shell中启用了ipv6?

Bou*_*uke 11

这可以通过检查以下的存在来测试/proc/net/if_inet6:

test -f /proc/net/if_inet6 && echo "IPv6 supported" || echo "IPv6 not supported"
Run Code Online (Sandbox Code Playgroud)

我在Windows上对Ubuntu,Mint,Raspberry PI和Bash shell进行了测试,它适用于所有这些环境.

  • 谢谢.在Mac OSX上,它错误地说"IPv6不受支持" - 因为'/ proc/net/if_inet6'是特定于Linux的. (2认同)
  • 可以运行的OS X/macOS特定测试是`networksetup -listallnetworkservices | 读取ns; do networksetup -getinfo"$ {ns}"| grep IPv6; done`.您可以有条件地使用`之后的`sw_vers&>/dev/null; 如果[$?-eq 0]; 然后......` (2认同)