스크립트를 종료하고 동일한 옵션과 인수로 다시 시작하세요.

스크립트를 종료하고 동일한 옵션과 인수로 다시 시작하세요.

대개 !! 마지막으로 주어진 명령을 반복합니다. 하지만 bash 스크립트에서는 작동하지 않는 것 같습니다. 스크립트를 종료하고 지난번에 제공된 것과 똑같은 옵션과 인수를 사용하여 반복하는 방법이 있습니까?

추가 정보: 내 스크립트의 일부에서 서버가 실행 중인지 확인합니다. 그렇지 않은 경우 etherwake에 의해 시작됩니다. 서버가 최종적으로 가동될 때까지 스크립트를 종료하고 다시 시작하려는 부분입니다. 이로 인해 시스템/네트워크 안정성을 위협할 수 있는 무한 루프가 쉽게 발생할 수 있다는 문제를 무시합니다.

더 쉽고 안전한 방법이 있나요? GOTO LINE 명령이나 이와 유사한 것이 없는 것 같습니다.

답변1

무한 while 루프를 만드십시오.

#!/bin/sh

동안 [ 참 ]; 하다

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서버가 실행 중인지 확인하기 위한 현재 테스트입니다. 즉, 서버가 실행 중인 경우 0이 아닌 값을 반환하는 쉘 함수 또는 외부 명령(또는 ! server-is-running서버가 실행 중인 경우 해당 함수 또는 명령이 0을 반환하는 경우)~이다달리기).
  • 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

관련 정보