Один из способов - написать скрипт-обертку:
#!/bin/sh
myfile=$(mktemp)
fping "$@" > "$myfile"
for arg
do
case "$arg" in
(-*) # Ignore options
;;
(*) grep "^$arg " "$myfile"
esac
done
rm "$myfile"
Итак, если вы называете это myfping , и вы запускаете myfping -e 151.101.129.164 8.8.8.8 (где вам нужно либо предварять ./ или поместите скрипт в каталог, который находится в вашем PATH), он запустится
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"
где arg из 1.7.0.1 будет преобразован в darg 1\.7\.0\.1 которая не будет соответствовать 127.0.1
Приведенный выше скрипт специфичен для bash из-за "строки здесь" (<<< "$arg").
Вы можете сделать это POSIX-совместимым, изменив строку darg= на
darg=$(printf "%s" "$arg" | sed 's/\./\\./g')
- Выше может быть красная сельдь.
Если вы
fping 127.0.1 , то fping может нормализовать адрес и сообщить результат для 127.0.0.1 ; тогда бы grep не нашел бы этого.
А может и нет; проверьте свою версию fping .
- Если вы используете какие - либо опции , которые имеют аргументы, как
-c count или -I interface case логика в моем сценарии будут относиться аргументы опции , как если бы они были обычными аргументами; т.е. целевые имена хостов / адреса.
Это, вероятно, не будет иметь значения.
- Если у вас есть аргумент, содержащий
* , [ … ] или некоторые другие специальные символы, grep может привести к неожиданным результатам.
Похоже, что это не проблема в реальной жизни.
- Если
fping выводит какую-либо информацию, которая не соответствует целевому аргументу имени / адреса хоста, вы ее не увидите.
- Этот скрипт не завершается со статусом выхода из
fping .
Исправление оставлено в качестве упражнения.