nslookup在变量和显示中捕获stderr

时间:2013-05-07 14:02:05

标签: shell stderr nslookup

在shell脚本中,我在URL上运行nslookup

有时一些url返回无法解析错误。我需要在变量中捕获这些错误。

这是nslookup的代码,它获取了返回的IP地址

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

现在在相同的变量输出中,我想捕获错误

nslookup: can't resolve

Stdout我在一个文件中捕获。

我尝试了不同版本的重定向 - 2>& 1和其他版本,但错误未分配给变量。我不希望将错误重定向到单独的文件,但希望将其记录在上面的输出变量中。

2 个答案:

答案 0 :(得分:1)

使用

时,stderr的重定向有效
output=$(nslookup "$URL" 2>&1 | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1')

但由于您使用grep Add立即将其过滤掉,因此无效。你需要重新思考你的逻辑以及你真正想要的东西。也许更好的方法是

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

答案 1 :(得分:1)

只要您使用awk,就可以大大简化事情

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

为清晰起见,一行被分成三行。我不能重现你说你有2&>1的问题,我也不相信它会失败。