bashrc의 읽기 전용 TMOUT으로 인해 로그인 시 TMOUT이 읽기 전용이라는 여러 메시지가 나타나는 이유는 무엇입니까?

bashrc의 읽기 전용 TMOUT으로 인해 로그인 시 TMOUT이 읽기 전용이라는 여러 메시지가 나타나는 이유는 무엇입니까?

TMOUT 변수와 다양한 제안을 조사한 후 /etc/bashrc 파일에 다음을 설정했습니다.

TMOUT=600
readonly TMOUT
export TMOUT

이제 사용자가 로그인하면 TMOUT이 600으로 설정되고 읽기 전용으로 설정되어 내보내지지만 다음 오류가 발생합니다.

-bash: TMOUT: readonly variable
-bash: TMOUT: readonly variable

어떤 제안이 있으십니까?

답변1

/etc/bashrc한 번 이상 가져오는 것 같아요 .

echo "TMOUT=<$TMOUT>: ${BASH_SOURCE[*]}"

작업 전 한 줄.

AFAIR는 기본적으로 제공되지 않지만 /etc/bashrc명시적으로 제공되며 ~/.bashrcRHEL과 유사한 배포판에서만 제공됩니다.

그러나 변수를 내보내고 읽기 전용으로 만드는 것은 예상한 대로 작동하지 않습니다.

(readonly FOO=33; export FOO; bash -c 'FOO=47')
  # no error

환경 변수는 쉘의 "읽기 전용" 속성을 인식하지 못합니다. 이는 현재 세션/스크립트 내에서만 작동합니다.

이는 사용자가 TMOUT단순히 다른 쉘을 실행하여 쉘을 우회할 수 있음을 의미합니다 env -u TMOUT bash --norc. 읽기 전용으로 설정하면 문제만 발생합니다.

답변2

변수에 할당하려고 시도했지만 이제 읽기 전용입니다.

다음을 사용하여 변수가 읽기 declare전용인지 확인할 수 있습니다.

declare -p TMOUT 2>/dev/null | grep -- '-r' >/dev/null || TMOUT=600

declare리디렉션은 변수가 선언되지 않은 경우 출력 및 오류 메시지를 숨깁니다.

답변3

좋습니다. Billy 삼촌의 답변이 저를 이 문제 해결의 길로 이끌었습니다. /etc/profile과 각 사용자의 .bashrc 파일은 TMOUT 변수가 설정되고, 내보내지고, 읽기 전용으로 만들어지는 /etc/bashrc에서 유래한 것 같습니다. /etc/bashrc에 대한 추가 호출을 제거하여 해결책을 찾았습니다.

도움을 주신 Joe Roba와 Billy 삼촌에게 감사드립니다.

관련 정보