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.1
como equivalente a127.0.0.1
. Então, se vocêfping 127.0.1
, efping
produz 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
arg
de1.7.0.1
será convertido emdarg
de1\.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ãofping
pode normalizar o endereço e relatar o resultado para127.0.0.1
; então ogrep
não acharia isso. Ou talvez não; verifique sua versão defping
. - Se você usar alguma opção com argumentos,
como
-c count
ou-I interface
, a lógicacase
no 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,grep
pode produzir resultados inesperados. Isso não parece ser um problema na vida real. - Se
fping
gerar 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.