在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和其他版本,但错误未分配给变量。我不希望将错误重定向到单独的文件,但希望将其记录在上面的输出变量中。
答案 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
的问题,我也不相信它会失败。