Конечно, вам не нужно ожидать этого: нет ничего, что требует взаимодействия. Проще говоря bash
result=$( ping -c 2 -i 3 -W 1 "$1 )
if [[ $result == *"100.0% packet loss"* ]]; then
echo "not reachable"
fi
Поскольку вы уже ожидаете, вы можете использовать любую команду Tcl :
set result [exec ping -c 2 -i 3 -W 1 $1]
if {[string first { 100.0%} $result] != -1} {
puts "Source not reachable"
}
Я большой поклонник ожиданий, но если процесс не нуждается во взаимодействии, существуют более простые подходы.
Я забыл об обработке ошибок Tcl для команд exec
: если exe c 'ed Команда возвращает ненулевое значение или, если она выдает какой-либо вывод в stderr, exe c выдаст ошибку. Путь к exe c ping:
if {[catch {exec ping -c 2 -i 3 -W 1 $1} result] != 0} {
puts "ping returned non-zero: $result"
if {[string first { 100.0%} $result] != -1} {
puts "Source not reachable"
}
}
Исчерпывающе задокументировано на вики Tcl