2

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

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

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

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

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

nslookup: can't resolve

我在文件中捕获的标准输出。

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

4

2 回答 2

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
于 2013-05-07T15:04:14.567 回答
1

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

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

为了清楚起见,一条线被分成三条。我无法重现您所说的问题,2&>1也不相信它应该失败。

于 2013-05-07T15:18:04.593 回答