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