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
明示的に提供され、~/.bashrc
RHEL と同様のディストリビューションでのみ提供されます。
ただし、変数をエクスポートして読み取り専用にすることは、期待どおりに機能しません。
(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おじさんに感謝します。