경로 추적 출력에서 "홉"(표준 오류, 실제로)의 경우에만 발생은 표준 에러 "헤더"라인에 상단을 향해 있습니다 :
traceroute to foo.bar.com (123.12.1.23), 30 hops max, 40 byte packets
등 - 원하던 한 줄이라면 바람직하지 않은 히트의 위험을 줄이기 위해 "hops max,"
또는 그와 비슷한 grep을 사용할 수 있습니다 (일부 중간 호스트가 방금 "홉"을 가지면 DNS).
이게 무슨 뜻이야? 문제는 bash 변수로이 최대 30 개의 홉을 차지합니까? 이 후 $maxhops
을 사용할 수 있습니다 (그리고 위의 예에서 30 예정) - 그 다음, 그래서 만약
maxhops=`traceroute www.yahoo.com 2>&1 >/dev/null | grep "hops max" | cut -d' ' -f5`
는 도움이 될 것입니다.
하지만 완전히 다른 것을 의미하는 것으로 의심됩니다. 분명히 ... 어쩌면 ...?
편집 : OP는 traitsoute로 측정 한 실제 홉 수와 maxhops가 아닌 원하는 것으로 밝혀졌습니다. 그 목적,
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은 에 대해 더 적절할 수도 있습니다) ;-).
나는 maxhops 변수를 설정한다는 생각을 좋아합니다. 귀하의 권리는 다음과 같이 스크립트의 최종 출력물을 화면에 표시합니다. "호스트 www.google.com은 --- 홉 거리입니다." ----는 traceroute 명령에서 파싱 된 홉 값입니다. 사용자가 입력 한 사이트에 따라 다를 수 있습니다. 그래서 나는 단지 traceroute에서 파싱 된 홉 수와 그 데이터 만 잡으려고한다. 어떻게 생각하니? –
wc -l을 사용하면 헤더가 계산되지 않아야하므로 정확하지 않습니다.즉, traceroute에 몇 번이나 표시됩니다 * * * 당신은 그것을 홉으로 간주하고 싶습니까? – ghostdog74
"헤더"가 stderr에 있으므로 wc는 그것을 계산하지 않습니다 (/ dev/null로 리디렉션되었지만 문제가 아니므로 & 1로 깔때기가 없으면 계산되지 않습니다). 그것을보십시오, @ ghostdog74 : 꼬리 -1 및 커트, 및 wc -l는, 정확하게 동일한 수를 준다! –