Shell nslookup在变量中捕获stderr并显示

Shell nslookup在变量中捕获stderr并显示,shell,stderr,nslookup,Shell,Stderr,Nslookup,在shell脚本中,我正在对URL的数量运行nslookup 有时某些url返回无法解决错误。我需要在变量中捕获这些错误 下面是获取返回的ip地址的nslookup代码 output=$(nslookup "$URL" | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1' ) 现在在同一个变量输出中,我想捕获错误 nslookup: can't resolve 我正在文件中捕获的标准数据 我尝试了不同版本的re-directio

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

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

下面是获取返回的ip地址的nslookup代码

output=$(nslookup "$URL" | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1' )
现在在同一个变量输出中,我想捕获错误

nslookup: can't resolve
我正在文件中捕获的标准数据


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

当您使用

output=$(nslookup "$URL" 2>&1 | grep Add | grep -v '#' | cut -f 3 -d ' ' | awk 'NR>1')
但这是徒劳的,因为您可以使用
grep Add
立即过滤掉它。你需要重新思考你的逻辑和你真正想要的。也许更好的方法是

output=$(nslookup“$URL”2>&1)
案例$
(一);;;
(*)输出=$(echo“$output”| grep Add |…);;
以撒

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

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

为了清楚起见,一行被分成三行。我无法重现您所说的
2&>1
问题,我也不认为它会失败。

您将
2>&1
重定向放在
“$URL”
之后第一个管道之前?应该有用。祝你好运。@Sheller只有在2>&1工作后没有其他管道时,这才有效。你在用什么操作系统?为了实践起见,@Jens的解决方案对我来说很好。祝大家好运。谢谢你的回复。我会试试看。