잠시 후 대화형 세션에서 애플리케이션을 계속 다시 시작합니다.

잠시 후 대화형 세션에서 애플리케이션을 계속 다시 시작합니다.

그래서 저는 이것이 실제로 적용할 만한 것이 많지 않은 다소 복잡한 사용 사례라는 것을 알고 있습니다. 그래서 불행히도 지금까지 많은 유용한 지침을 찾을 수 없었습니다.

기본적으로 로그인 시 CLI 애플리케이션을 자동으로 실행하고 종료 시 설정된 시간(예: 1분)이 경과한 후 애플리케이션을 계속 다시 시작하는 터미널 전용 세션을 갖고 싶습니다. 셸은 응용 프로그램 종료 중에 정상적으로 작동해야 합니다.

이것은 나의 현재 설정입니다(지금까지는 훌륭하게 작동합니다).

  • 터미널 전용 세션이 있습니다(GUI 없음, 이 경우 Linux Mint).
  • 로그인하면 대화형 CLI 애플리케이션이 자동으로 실행됩니다(예를 들어 .bashrc에 추가하면 쉽게 수행됨).
  • 사용자가 내 CLI 애플리케이션을 종료하면 일반 bash 터미널로 돌아가서 명령을 실행할 수 있습니다(원하는 대로).

이제 지금까지 알아낼 수 없는 까다로운 부분이 나옵니다.

  • 시간 초과에 도달할 때까지 터미널을 계속 사용 가능한 상태로 유지하면서 짧은 시간 내에 사용자 터미널에서 애플리케이션을 자동으로 다시 시작하려면 어떻게 해야 합니까?
  • 사용자는 bash에서 잠재적으로 피해를 줄 수 있는 작업(예: 다른 셸 시작, 실행 중인 프로세스 종료 또는 로그아웃)을 하지 않을 것이라고 가정할 수 있습니다. 신속하게 완료되는 1~2개의 다른 명령을 실행할 수 있어야 하지만 그 외에는 아무것도 실행할 수 없습니다.

나는 응용 프로그램 실행과 새 bash를 시작하는 명령 실행을 번갈아(루프에서) 실행하는 스크립트를 실행하여 이를 수행하려고 시도했지만 timeout올바르게 작동하지 않습니다. timeout 명령을 사용하여 대화형 bash 세션을 시작할 수 없는 것 같습니다. 따라서 이것은 가능한 접근 방식일 수 있지만(올바른 구문에 대한 포인터는 환영합니다) 다른 방법이나 아이디어도 완전히 괜찮습니다.

답변1

나는 대피소에서 이 의사 논리를 고려하는 것과 같은 생각을 가지고 있습니다.

answersRoomOneArray = {puzzleOneAnswer, puzzleTwoAnswer ... puzzleNAnswer}
# Room 1 Puzzles

puzzleOne () 
# Function to return a value
return puzzleOneAnswer

# Continue puzzles until Array is Full
...
if arrayCorrectRoomOne {} = answersRoomOne{} then
    unlockDoor ()
else
   punish ()
fi

위의 형식을 각 회의실 터미널에서 사용하고 arrayCorrect스마트 터미널인 경우 참가자가 접근할 수 없는 디렉터리 어딘가에 저장할 수 있습니다. 이 모듈식 접근 방식을 사용하면 타이머 없이 "컨트롤러 스크립트"가 필요하지 않습니다. 스크립트를 다시 시작해야 하는 경우 화면을 지우고 punish()함수에서 다시 시작하세요. "죽기" 전에 너무 많은 횟수만 시도하고 싶다면, punish()도달한 횟수를 세는 카운터를 추가하고 X번 시도한 후에 참가자를 "죽이세요".

관련 정보