traceroute 输出(实际上是 stderr)中唯一出现的“跳跃”是在 stderr “header”行中的顶部:
traceroute to foo.bar.com (123.12.1.23), 30 hops max, 40 byte packets
或类似的——如果这是你想要抓住的一条线,你可能会 grep for"hops max,"
或类似的东西,以减少不希望的命中的风险(如果一些中间主机恰好在他们的 DNS 中有“跳跃”)。
你是这个意思吗?您的问题是将这 30 个最大跳数抓取到 bash 变量中吗?如果是这样,那么
maxhops=`traceroute www.yahoo.com 2>&1 >/dev/null | grep "hops max" | cut -d' ' -f5`
应该有帮助——你可以$maxhops
在这之后使用(在上面的例子中它将是 30)。
但我怀疑你的意思完全不同 - 澄清一下,也许......?
编辑:OP已经澄清了他们想要的不是maxhops,而是由traceroute测量的实际跃点数;为了这个目的,
numhops=`traceroute www.yahoo.com 2>/dev/null | tail -1 | cut -d' ' -f2`
或更简单的
numhops=`traceroute www.yahoo.com | wc -l`
应该可以正常工作!
如果您确实想要任何更好的东西(或多个结果等),那么其他答案中建议的 awk 非常好,但是 grep、tail 和 cut 的管道组合是一种相当传统的 unix-y 方法,而且仍然相当适用于简单的情况(和一些复杂的情况,但 awk 或 perl 可能更适合那些;-)。