CentOS 서버에 SSH 연결 후에 잠시 다른 창에서 작업하고 있으면 창이 꺼지는 바람에 이유를 찾아보니

/etc/bashrc 파일의 TMOUT 환경변수 때문이었다.


TMOUT=300

readonly TMOUT

export TMOUT



보안상으로 세션의 타임아웃 값을 지정해 일정 시간동안 동작이 없으면 자동으로 로그아웃하는 것이 권장되지만, 테스트 서버에서는 불편하기만 한지라..(편리함을 얻고 보안을 버린다!는 망언) TMOUT 값을 지우려고 unset을 해보았다.


$ unset TMOUT

bash: PI: readonly variable


/etc/bashrc 파일에서 readonly TMOUT 이라고 된 것을 확인했을 때는 값만 변경할 수 없는 줄 알았더니,

환경 변수의 삭제 또한 할 수 없었다.



구글링을 통해 쉽게 Stackoverflow에서 답을 찾을 수 있었다.


$ readonly PI=3.14

$ unset PI

-bash: unset: PI: cannot unset: readonly variable

$ cat << EOF| sudo gdb

attach $$

call unbind_variable("PI")

detach

EOF

$ echo $PI


$


gdb를 통해 bash의 unbind_variable 메서드를 호출함으로써 변수를 제거한다.

답변 작성자에 따르면 이는 일종의 핵이며(디버거를 통해 프로세스 내부의 함수를 호출하는 것이므로), 추천하는 방법이 아니라고 한다. 사용 시의 위험에 대해서는 본인이 책임지라고 적어두었다.


참 재미있는 쉘 스크립트의 세계 'ㅅ'


참고 : Stack overflow - Unset readonly variable in bash

+ Recent posts