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[*]}"

作業前に1行。

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おじさんに感謝します。

関連情報