我正在寻找一种方法,当命令失败时,获取使用
wget
命令请求的域的 IP 地址。
我无法使用
ping
命令来获取IP,因为wget
命令终止后地址可能会改变。
我想在 shell 脚本中执行此操作。
当
wget
失败时,它以非零退出状态终止,并将错误写入标准错误描述符 (2)。
因此您可以检查退出代码(
$?
变量),并解析写入标准错误的字符串:
url='http://stackoverflow.com/users/edit/1646322'
output=$( wget "$url" 2>&1 )
if [[ $? -ne 0 ]]; then
printf '%s' "$output" | \
perl -ne '/^Connecting to .*\|([^\|]+)\|/ and print $1'
fi
示例输出
151.101.129.69
我遇到了同样的问题,wget 是容器中唯一可用的网络工具。无论 wget 是否成功退出,我都需要获取域的 ip。这就是我最终在多行 shell 脚本中所做的事情:
wget --no-check-certificate --no-dns-cache --save-headers https://example.com 2>getip.txt || true
result="$(grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b' getip.txt | head -n 1)"
echo "$result"
崩溃了,
--no-check-certificates
即使 SSL 无效也要继续
--no-dns-cache
确保我们获得最新的IP
--save-headers
将 IP 打印到文件(处理命令的输出在成功的情况下不会给出 IP)
grep -oE '\b([0-9]{1,3}\.){3}[0-9]{1,3}\b'
查找输出中的所有 IP 地址,并通过管道传输到
head -n 1
只返回第一个,这就是我一直在寻找的。