fping – fping 결과를 항상 명령줄 순서대로 순차적으로 만드는 방법

fping – fping 결과를 항상 명령줄 순서대로 순차적으로 만드는 방법

fping명령줄 인수 순서에 따라 항상 순차적 인 결과를 얻고 싶습니다 .

예를 들어 다음 명령은 다음과 같습니다.

fping -e 151.101.129.164 8.8.8.8

다음과 같은 결과가 나올 수 있습니다.

8.8.8.8 is alive (5.43 ms)
151.101.129.164 is alive (63.2 ms)

위의 결과는 명령에 대한 인수와 순서가 다릅니다 fping. 여기서 는 명령 151.101.129.164에 첫 번째로 배치되지만 fping결과는 두 번째로 표시됩니다.

151.101.129.164첫 번째 fping 명령의 순서를 변경하지 않고 어떻게 결과를 먼저 표시할 수 있습니까 ?

답변1

한 가지 방법은 래퍼 스크립트를 작성하는 것입니다.

#!/bin/sh
myfile=$(mktemp)
fping "$@" > "$myfile"
for arg
do
        case "$arg" in
          (-*)  # Ignore options
                ;;
          (*)   grep "^$arg " "$myfile"
        esac
done
rm "$myfile"

따라서 이것을 호출 myfping하고 실행 하면( PATH에 있는 디렉터리에 스크립트를 myfping -e 151.101.129.164 8.8.8.8 추가하거나 넣어야 함 ) 실행됩니다../

    fping -e 151.101.129.164 8.8.8.8
임시 파일로 출력한 다음 명령줄(왼쪽에서 오른쪽) 순서로 인수를 검토하고 결과를 순서대로 가져옵니다.

노트:

  • IPv4 주소 구문 분석기는 매우 유연합니다. 대부분의 (전부는 아니지만) 시스템에서 127.0.1와 동등한 것으로 해석됩니다 127.0.0.1. 따라서 , fping 127.0.1및 가 fping시작하는 출력 행을 생성하고 127.0.1와 같은 인수도 있는 경우 1.7.0.1이는 와 일치하는 정규식으로 처리됩니다 127.0.1. 다음과 같이 이를 극복할 수 있습니다.

    #!/bin/bash
    myfile=$(mktemp)
    ./fping "$@" > "$myfile"
    for arg
    do
            case "$arg" in
              (-*)  # Ignore options
                    ;;
              (*)   darg=$(sed 's/\./\\./g' <<< "$arg")
                    grep "^$darg " "$myfile"
            esac
    done
    rm "$myfile"
    

    of 는 argof 로 1.7.0.1변환되며 이는 일치하지 않습니다 .darg1\.7\.0\.1127.0.1

    위 스크립트는 "여기 문자열"( ) 때문에 bash에만 해당됩니다 <<< "$arg". darg=행을 다음으로 변경하여 POSIX 호환으로 만들 수 있습니다.

    darg=$(printf "%s" "$arg" | sed 's/\./\\./g')
    
  • 위의 내용은 붉은 청어일 수 있습니다. 당신이 fping 127.0.1그렇다면fping ~할 것 같다주소를 정규화하고 결과를 보고합니다 127.0.0.1. 그러면 그 사람은 grep그걸 못 찾을 거예요. 아니면 아닐 수도 있습니다. 의 버전을 확인하세요 fping.
  • 또는 같은 인수가 있는 옵션을 사용하는 경우 내 스크립트의 논리 는 옵션 인수를 일반 인수인 것처럼 처리합니다. 즉, 대상 호스트 이름/주소입니다. 이것은 아마도 중요하지 않을 것입니다.-c count-I interfacecase
  • *, []또는 기타 특수 문자가 포함된 인수가 있는 경우 grep예기치 않은 결과가 발생할 수 있습니다. 실생활에서 문제가 될 가능성은 없을 것 같습니다.
  • 대상 호스트 이름/주소 인수에 해당하지 않는 정보를 출력 하면 fping해당 정보가 표시되지 않습니다.
  • 이 스크립트는 의 종료 상태로 종료되지 않습니다 fping. 이를 고치는 것은 연습문제로 남았습니다.

관련 정보