시간 초과로 인해 bash가 종료되면 명령 실행

시간 초과로 인해 bash가 종료되면 명령 실행

나는 사용해야 할 해결책을 알고 있다

trap your_command EXIT

그러나 내가 원하는 것은 TMOUT 변수 설정 시간 초과로 인해 bash가 종료되는 경우에만 명령을 실행하는 것입니다. 탈출구가 있나요?

내 환경: RedHat 7.7

답변1

내가 볼 수 있는 유일한 옵션은 ~/.bash_logout파일에 명령을 넣는 것입니다. 현재 쉘이 로그인 쉘이고 현재 쉘이 하위 쉘이 아닌 경우 해당 파일을 실행하십시오.

내부에읽기 명령이 평가되는 bash의 소스 코드, 값에 대한 경고 핸들러를 설정합니다 TMOUT.

  if (interactive)
    {
      tmout_var = find_variable ("TMOUT");

      if (tmout_var && var_isset (tmout_var))
      {
        tmout_len = atoi (value_cell (tmout_var));
        if (tmout_len > 0)
        {
          old_alrm = set_signal_handler (SIGALRM, alrm_catcher);
          alarm (tmout_len);
        }
      }
    }

저것알람 핸들러다음과 같습니다.

static sighandler
alrm_catcher(i)
     int i;
{
  printf (_("\007timed out waiting for input: auto-logout\n"));
  fflush (stdout);
  bash_logout ();   /* run ~/.bash_logout if this is a login shell */
  jump_to_top_level (EXITPROG);
  SIGRETURN (0);
}

이것bash_logout함수는 다음과 같이 정의됩니다.:

void
bash_logout ()
{
  /* Run our `~/.bash_logout' file if it exists, and this is a login shell. */
  if (login_shell && sourced_logout++ == 0 && subshell_environment == 0)
    {
      maybe_execute_file ("~/.bash_logout", 1);
#ifdef SYS_BASH_LOGOUT
      maybe_execute_file (SYS_BASH_LOGOUT, 1);
#endif
    }
}

답변2

여기에서 찾은 솔루션:

https://stackoverflow.com/questions/58502915/ 차별화-종료-및-세션-타임아웃 사이

쉘 환경 변수 PROMPT_COMMAND를 활용하고 사용자 정의 함수를 호출하십시오. 사용자 정의 함수에서는 쉘 유휴 시간이 초과되었는지 확인하고 시간 초과 또는 쉘 종료로 인해 트랩이 호출되었는지 여부를 확인할 수 있습니다.

관련 정보