Talvez algo como:
read -r ip country < <(
wget --tries=1 --timeout=10 -qO- 'http://ipinfo.io/?callback=callback' |
perl -MJSON -l -0777 -ne '
if (/callback\((.*)\);$/s) {
$j = from_json($1);
print "$j->{ip} $j->{country}"
}'
)
Para um shell com suporte a JSON incorporado, consulte ksh93v (atualmente em beta):
ipinfo=${
wget --tries=1 --timeout=10 -qO- 'http://ipinfo.io/?callback=callback'
} || exit
ipinfo=${ipinfo/%*"callback("@(*)");"/}
IFS= read -rm json j <<< $ipinfo
ip=${j.ip} country=${j.country}
Observe que, em vez de ?callback
query (btw, ?
é um caractere curinga de shell, portanto, precisa ser citado), você também pode usar :
curl -H 'Accept: application/json' ipinfo.io/json
ou:
wget --tries=1 --header='Accept: application/json' --timeout=10 -qO- http://ipinfo.io/json
Que você poderia canalizar para jq -r '.ip, .country'
:
{ read -r ip; read -r country; } < <(
curl -H 'Accept: application/json' ipinfo.io/json |
jq -r '.ip, .country'
)