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が、結果では 2 番目に表示されます。

151.101.129.164最初の fping コマンドの順序を変更せずに、結果を最初に表示するにはどうすればよいですか?

答え1

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.1fping入力して で始まる出力行を生成し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"
    

    ここで、argはに1.7.0.1変換されますが、 には一致しません。darg1\.7\.0\.1127.0.1

    上記のスクリプトは「here文字列」( )があるためbash固有のものです。これをPOSIX準拠にするには、次の行を<<< "$arg"変更します。darg=

    darg=$(printf "%s" "$arg" | sed 's/\./\\./g')
    
  • 上記は誤解を招くかもしれない。もしあなたがfping 127.0.1fping かもしれないアドレスを正規化し、 の結果を報告します127.0.0.1。すると、 はgrepそれを見つけられません。 または、見つけられないかもしれません。 のバージョンを確認してくださいfping
  • またはのような引数を持つオプションを使用する場合、スクリプト内のロジックはオプション引数を通常の引数、つまりターゲット ホスト名/アドレスであるかのように扱います。これはおそらく問題にはなりません。-c count-I interfacecase
  • *[]、またはその他の特殊文字を含む引数がある場合、grep予期しない結果が生じる可能性があります。これは実際には問題にならないようです。
  • fpingターゲット ホスト名/アドレス引数に対応しない情報を出力する場合、その情報は表示されません。
  • このスクリプトは からの終了ステータスで終了しませんfping。これを修正するのは演習として残されています。

関連情報