Joel a écrit, samedi 5 février 2005, à 16:25 :
[...]
Un grep peux effectivement faire l'affaire, mais il faudrait le piper
pour que cela soit propre, genre :
debian$ cat /etc/hosts | sed -e "s/#.*//g" | \
grep $ADDRESSIP | awk '{print $2}
On pourrait simplifier, et n'utiliser que sed ou awk ; ce dernier est
plus commode pour choisir un champ :
</etc/hosts awk "$1=~/^$ADDRESSIP$/{print $2}"
(mais ci-dessus $ADDRESSIP est une regexp).
Mais au genialissime getent fait cela tous seul :
[...]
debian$ getent hosts $ADDRESSIP | awk '{print $2}'
"$ADDRESSIP" est préférable
Mais l'idéale serait un outils qui respect l'ordre configurer dans
/etc/host.conf (comme nslookup sur HP-UX, a noter que je n'ai pas essayé
avec nslookup, le package tendant à être remplacer par host )
d'ou la petite fonction :
ipsolve () [...]
#!/bin/bash
ipsolve () {
ADDRESSIP="$1"
</etc/host.conf sed -e '
/^[[:space:]]*order[[:space:]]*/!d
s///
s/[[:space:]]*,[[:space:]]*/\n/' | \
while read resolvsource; do
case "$resolvsource" in
hosts)
GETENT=`which getent`
if [ -n "$GETENT" ] &&
hostresolv=$(
"$GETENT" hosts "$ADDRESSIP" | \
awk '{print $2}'
) &&
[ -n "$hostresolv" ];
then
echo -n "$hostresolv "
exit 0
fi
;;
bind)
HOSTCMD=`which host`
if [ -n "$HOSTCMD" ] &&
hostresolv=$("$HOSTCMD" "$ADDRESSIP")
then
case "$hostresolv" in
*"not found"*)
;;
*)
echo -n "${hostresolv##* } "
;;
esac
exit 0
fi
;;
esac
done
echo " $ADDRESSIP"
}
ipsolve "$1"