Один из способов - написать скрипт-обертку:
#!/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
.
Исправление оставлено в качестве упражнения.