Завершите скрипт и перезапустите его с теми же параметрами и аргументами.

Завершите скрипт и перезапустите его с теми же параметрами и аргументами.

Обычно !! повторяет последнюю заданную команду. Но, похоже, это не работает в скрипте 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

Связанный контент