프로그램을 실행할 Bash 스크립트를 생성하고, 프로그램이 충돌 없이 종료되면 다시 실행하세요.

프로그램을 실행할 Bash 스크립트를 생성하고, 프로그램이 충돌 없이 종료되면 다시 실행하세요.

MacOSX(UNIX 기반 시스템이라 여기가 맞는 것 같아요)에서 애플리케이션을 실행하는 bash 스크립트를 만드는 가장 쉬운 방법을 알고 싶습니다. 프로그램이 종료될 때까지 기다리십시오. 충돌 없이 종료되면 다시 실행하세요. 그렇지 않으면 충돌 보고 창을 열어두고 종료하세요.

이 스크립트가 충돌하거나 수동으로 종료될 때까지 영원히 실행되기를 원합니다.

막연한 생각은 있지만 확실하지 않습니다. 이것이 내가 지금까지 가지고 있는 것입니다:

echo "Launching Autorun…"

if ["$1" -eq "0"]; then
# Application exited successfully. Restarting.
/path/to/application.app
else
# An error occured. Do nothing and exit.
    exit
fi

답변1

이건 배쉬야while 루프하다:

while /path/to/application.app
do
    :
done

애플리케이션을 실행하고 성공적으로 종료되면 루프 본문을 실행합니다. :~이다쉘 무작동 명령(루프에는 본문이 있어야 하므로 본문을 여기에 넣습니다.) 그런 다음 맨 위로 돌아가서 프로그램을 다시 실행합니다. 실패하면 루프 실행이 중지되고 스크립트가 종료됩니다.

그러나 일반 Mac 응용 프로그램( )을 실행 중인 것 같습니다 .app. 이 경우 몇 가지 문제가 발생합니다. 먼저, 다음을 사용해야 합니다.open주문하다, 애플리케이션 디렉토리를 직접 실행하는 대신: open /path/to/application.app.

또 다른 점은 이 작업을 수행하면 open응용 프로그램이 계속 수행하는 작업에 관계없이 일반적으로 즉시 성공적으로 종료된다는 것입니다. 이는 절대적으로 보편적이지는 않지만 대부분은 그렇습니다. 이렇게 하면 이 옵션을 사용하여 애플리케이션이 종료될 때까지 -W강제로 차단할 수 있습니다 . 애플리케이션이 이미 실행 중인 경우 기존 실행도 종료될 때까지 대기합니다.openopen -W /path/to/application.app

문제의 심각도는 실행 중인 응용 프로그램에 따라 다릅니다. 제대로 작동하지 않으면 셸에서 이 작업을 수행하는 것이 최선의 선택이 아닐 수 있습니다. 이 경우에는 AppleScript를 사용하는 것이 더 나을 것입니다.다양한 요청을 해보세요.

답변2

나는 이것을 테스트했습니다 :

#!/bin/bash
while <your_cmd_here>
do
    true
done

이는 명령의 반환 코드(POSIX 스타일)를 테스트하여 수행됩니다. 0은 정상을 의미하고, 그 밖의 모든 것은 오류로 간주될 수 있습니다.

관련 정보