Обычно!! повторяет последнюю данную команду. Но это, кажется, не работает в сценарии удара. Существует ли способ закончить сценарий и повторить его с теми же самыми опциями и аргументами, учитывая прошлый раз?
Дополнительная информация: В части моего сценария это проверяется, если сервер работает. Если это не, это запускается etherwake. Это - часть, где я хочу, чтобы сценарий был закончен и перезапущен, пока сервер не наконец. Игнорирование проблемы, которую это легко может привести к бесконечному циклу, который мог бы угрожать системе/сетевой стабильности.
Существует ли более легкий/более безопасный путь? Кажется, нет команды GOTO LINE или чего-то подобного.
Просто сделайте бесконечный цикл с условием продолжения:
#!/bin/sh
, в то время как [TRUE]; сделайте
check_server_status 10.0..
etherwake ff:ff..сделанный
Как насчет
while server-is-not-running; do
try-and-start-server
sleep seconds-to-wait
done
где
server-is-not-running
Ваш текущий тест должен видеть, работает ли сервер, т.е. функция оболочки или внешняя команда, возвращающаяся ненулевой, если сервер работает (альтернативно, ! server-is-running
если та функция или команда возвращают нуль, если сервер работает).try-and-start-server
команда должна запустить сервер, который снова может быть функцией оболочки или внешней командойseconds-to-wait
разумное число секунд для ожидания успешного запускаДля ограничения количества попыток замените while
с a for
:
for i in {1..number-of-attempts}; do
try-and-start-server
sleep seconds-to-wait
server-is-not-running || break
done