is_host_acessible() {
ping $1 -c 10 >/dev/null && echo 1
}
if [ ! $(is_host_acessible 192.168.123.45) ]; then
echo "запускаем резервный сервак"
fi
ping 192.168.123.45 -c 10 || echo "запускаем резервный сервак"
Ни в одной операционной системе нельзя вернуть строку в качестве exit code, это архитектурно один байт, при котором 0 это успех, не ноль это ошибка.Так я-то это понимаю. :) Потому и задал провокационный вопрос. Но так и не услышал от вас, какую альтернативу вы предлагаете для возврата строки из функции.
Попробуй же собственный код - он тупо не будет работать.Он у меня полтора года успешно работает на шести серверах. И, разумеется, до использования в product я тестировал свой код.
Есть пинг или нет пинга, будет возвращать успех, потому что возврат из функции в bash - это exit codeА если вы посмотрите внимательно на вызов фунции, то поймёте, что exit code там даже и не проверяется.
А что там в stdout возвращается - это еще тестить надо.Так точно, протестил давно. При наличии пинга единица, при отсутствии пинга - ничего (пустая строка).
Но так и не услышал от вас, какую альтернативу вы предлагаете для возврата строки из функции.
каких-то недостатков использования stdout вы не назвали
Просто не совсем интуитивно, что из этого true а что falseНу смотрите, код в вашем ответе тоже не совсем интуитивен, именно поэтому вы не обратили внимание, что он делает ровно обратное к тому, что просил автор вопроса - команда выполняется при успешном прохождении пинга (я проверил). Интуитивность не предполагает подобные ошибки, не так ли? И проблема не в вас и не во мне. Скрипты на bash и интуитивность вообще плохо сочетаются. Там больше магии, чем программирования.
Чтобы была интуитивность нужно просто разобрать БАЗОВЫЙ синтаксис основных командТогда у нас с вами разное определение понятия интуитивности. Для меня интуитивность подразумевает, что, будучи знакомым с несколькими ЯП, человек может "по диагонали" пролистать описание синтаксиса ещё одного ЯП и начать на нём писать. Без досконального изучения особенностей.
и test 0 возвращает trueага, пример контринтуитивности.
ага, пример контринтуитивности.
Например программы /bin/[, синтаксис которой вам показался неинтуитивным.Позвольте напомнить, с чего начался разговор об интуитивности:
Просто не совсем интуитивно, что из этого true а что false:Так кому из нас показался неинтуитивным синтаксис /bin/[ ?
if [ ! ]
и if [ ! 1 ]
Я понял, что уже придираетесь к мелочам, вместо сути.Я просто написал работающий код. К мелочам стали придираться вы, а я только отвечаю на ваши выпады. Если бы ваши замечания были по существу, то я был бы благодарен за критику. Но вы именно стали придираться к синтаксису, который конкретно вам был непонятен, хотя и не был ошибочен.
использование команды, где предплоложительно должен быть expression, а вы его там не указываете - не интуитивно и некорректно.man test не согласен с вами. man test говорит, что корректно, вам нужно было внимательнее читать man test. Для удобства я выделил существенные фрагменты: