#1 Le 01/07/2017, à 17:09
- jldamnet
[Résolu] read() et le here-string
question de débutant très certainement, mais je bloque là dessus depuis ce matin malgré le parcours de moultes pages décrivant read et le here-string (<<<) ... comme je n'ai pas pratiqué le shell depuis plus de 10 ans je dois certainement passer à côté d'une énormité !
=====
je veux affecter à 3 variables les adresses des 3 serveurs DNS OpenNIC les plus proches, que me fournit geoip sur le site OpenNIC
la page retournée contient une liste comme ceci
87.98.175.85 # ns10.fr # 97.98%
93.170.96.235 # ns2.uk # 99.51%
5.135.183.146 # ns12.fr # 97.87%
172.104.136.243 # ns2.he.de # 99.39%
130.255.73.90 # ns3.nw.de # 97.25%
151.80.147.153 # ns2.nor.fr # 97.76%
62.113.203.55 # ns1.de # 98.84%
62.113.203.99 # ns30.de # 98.79%
il faut simplement récupérer les adresses IP en tête de ligne, donc à priori head pour isoler 3 lignes puis awk pour en extraire les premières "colonnes"
essai rapide
echo $(curl -s https://api.opennicproject.org/geoip/ | head -3 | awk '{print $1}')
qui affiche
87.98.175.85 93.170.96.235 5.135.183.146
ou bien
echo "$(curl -s https://api.opennicproject.org/geoip/ | head -3 | awk '{print $1}')"
qui affiche
87.98.175.85
93.170.96.235
5.135.183.146
jusque là tout va bien
par contre, impossible d'affecter ces valeurs à trois variables
read ns1 ns2 ns3 <<< $(curl -s https://api.opennicproject.org/geoip/ | head -3 | awk '{print $1}')
car seule la première variable est chargée
echo $ns1
87.98.175.85
echo $ns2
echo $ns3
une bonne âme aurait-elle une idée ?
Dernière modification par jldamnet (Le 01/07/2017, à 17:25)
retraité au soleil
ex-Digital Equipment, ex-Wang, ex-Youpy, ex-IPC, ex-Gefco
Hors ligne
#2 Le 01/07/2017, à 17:16
- pingouinux
Re : [Résolu] read() et le here-string
Bonjour,
Essaye
read ns1 ns2 ns3 <<< $(curl -s https://api.opennicproject.org/geoip/ | head -3 | awk '{printf("%s ",$1)}')
Hors ligne
#3 Le 01/07/2017, à 17:24
- jldamnet
Re : [Résolu] read() et le here-string
et ca fonctionne impec !
merci 1000 fois !
retraité au soleil
ex-Digital Equipment, ex-Wang, ex-Youpy, ex-IPC, ex-Gefco
Hors ligne
#4 Le 01/07/2017, à 17:29
- Watael
Re : [Résolu] read() et le here-string
NON !
read n1 n2 n3 < <(cmd)
et le head est inutile avec awk :
awk 'NR<=3{ print $1 }'
et awk n'est pas indispensable :
$ mapfile -t ar < <(curlGeoIP)
$ ar=( "${ar[@]%% *}" )
$ echo "${ar[0]} - ${ar[1]} - ${ar[2]}"
87.98.175.85 - 93.170.96.235 - 5.135.183.146
Connected \o/
Welcome to sHell. · eval is evil.
En ligne