Uma maneira é escrever um script de wrapper:
#!/bin/sh
myfile=$(mktemp)
fping "$@" > "$myfile"
for arg
do
case "$arg" in
(-*) # Ignore options
;;
(*) grep "^$arg " "$myfile"
esac
done
rm "$myfile"
Então, se você chamar isso de myfping ,
e você executa myfping -e 151.101.129.164 8.8.8.8
(onde você precisa prefixar ./
ou colocar o script em um diretório que esteja no seu PATH),
ele será executado
fping -e 151.101.129.164 8.8.8.8com saída para um arquivo temporário, e depois percorrer os argumentos na ordem da linha de comando (da esquerda para a direita) e puxe os resultados em ordem.
Notas:
-
O analisador de endereços IPv4 é muito flexível; na maioria dos sistemas (se não todos), ele interpretará
127.0.1como equivalente a127.0.0.1. Então, se vocêfping 127.0.1, efpingproduz uma linha de saída que inicia127.0.1, e você também tem um argumento como1.7.0.1, que será tratado como uma expressão regular que corresponde a127.0.1. Você pode superar isso da seguinte maneira:#!/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"em que
argde1.7.0.1será convertido emdargde1\.7\.0\.1, que não corresponderá a127.0.1.O script acima é específico do bash por causa da "string aqui" (
<<< "$arg"). Você pode tornar isso compatível com POSIX alterando a linhadarg=paradarg=$(printf "%s" "$arg" | sed 's/\./\./g') - O texto acima pode ser um arenque vermelho.
Se você
fping 127.0.1, entãofpingpode normalizar o endereço e relatar o resultado para127.0.0.1; então ogrepnão acharia isso. Ou talvez não; verifique sua versão defping. - Se você usar alguma opção com argumentos,
como
-c countou-I interface, a lógicacaseno meu script tratará os argumentos da opção como se fossem argumentos comuns; isto é, nomes / endereços de host de destino. Isso provavelmente não importará. - Se você tiver um argumento que contenha
*,[…], ou alguns outros caracteres especiais,greppode produzir resultados inesperados. Isso não parece ser um problema na vida real. - Se
fpinggerar alguma informação que não corresponde a um argumento de nome / endereço de host de destino, você não vai ver. - Este script não sai com o status de saída de
fping. Correção que é deixada como um exercício.