2013-05-07 1 views
2

Dans un script shell Je suis en cours d'exécution nslookup le nombre d'URLstderr de capture nslookup dans une variable et affichage

Parfois, certains retours d'URL ne peuvent pas RESOLV erreur. J'ai besoin de capturer ces erreurs dans une variable.

ici est le code pour nslookup qui obtient l'adresse IP renvoyée

output=$(nslookup "$URL" | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1') 

Maintenant en même sortie variable, je veux saisir l'erreur

nslookup: can't resolve 

Stdout Je capturants un fichier.

J'ai essayé différentes versions de re-directions - 2> & 1 et d'autres mais l'erreur n'est pas assignée à la variable. Je ne veux pas que l'erreur soit redirigée vers un fichier séparé, mais qu'elle soit enregistrée dans la variable de sortie ci-dessus.

+0

vous placez la redirection '2> & 1' juste après' "$ URL" 'et avant le premier tuyau? Devrait marcher. Bonne chance. – shellter

+0

@shellter Ceci ne fonctionne que s'il n'y a pas d'autres tuyaux après 2> & 1 – user2074894

+0

Devrait fonctionner. Quel système d'exploitation utilisez-vous? Par souci de pracitcalité, la solution @Jens me semble bonne. Bonne chance à tous. – shellter

Répondre

1

Tant que vous utilisez awk, vous pouvez simplifier considérablement les choses

nslookup "$URL" 2>&1 | 
awk -e '/Add/ && !/#/ && NR > 1 {print $2}' 
    -e '/resolve|NXDOMAIN/ { print "error" }' 

Si une ligne a été divisé en trois pour plus de clarté. Je ne peux pas reproduire le problème que vous dites avoir 2&>1 et je ne crois pas qu'il devrait échouer.

1

La réorientation des travaux stderr lorsque vous utilisez

output=$(nslookup "$URL" 2>&1 | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1') 

mais il est inutile puisque vous la filtrer immédiatement avec le grep Add. Vous devez repenser votre logique et ce que vous voulez vraiment. Peut-être une meilleure approche est

output=$(nslookup "$URL" 2>&1) 
case $output in 
    (nslookup:*) ;; 
    (*) output=$(echo "$output" | grep Add | ...);; 
esac 
+0

Merci pour la réponse. Je vais essayer. – user2074894

Questions connexes