나는 사용해야 할 해결책을 알고 있다
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를 활용하고 사용자 정의 함수를 호출하십시오. 사용자 정의 함수에서는 쉘 유휴 시간이 초과되었는지 확인하고 시간 초과 또는 쉘 종료로 인해 트랩이 호출되었는지 여부를 확인할 수 있습니다.