読み取り専用のTMOUT変数–アクティビティがないときにシェルを自動的に終了することを無効にする回避策


10

ここには読み取り専用のBash変数があります。その変数の設定を解除することはできません。

$ echo $TMOUT
1800

回避策として、これらの行を書きました(私のセッションは終了しません)

#!/usr/bin/perl

$|++;
while (1) { print "\e[0n"; sleep 120; }

CentOS7 / RHEL7リポジトリに(上記のPerlコードのように)同様のことをする公式パッケージ(rpm)はありますか?vimエディターを開くのは好きではありません。コマンドが必要です。


4
これに対する通常の解決策はcat、セッションから離れたときに実行されます。そして、^ Cそれはあなたの帰りに。
2015

私のチームには、何週間も端末を開いたままにしておく人たちがいたため、同様の規則を課しました。私は1800は少し低いと同意しますが、何らかの理由でそこにあるに違いありません。人々はいつもの逸脱に気づく傾向があります...あなたのセッションは痛い親指のように際立ちます。
Rui F Ribeiro

読み取り専用の場合は、次のように入力しますexec env TMOUT=0 bash
。–ナイト

回答:


5

コマンドラインからperlコマンドを発行できます...

perl -e '$|++; while (1) { print "\e[0n"; sleep 120; }'

または、シェルで同じことを行うことができます(sh/のbash例):

while sleep 120; do printf '\33[0n'; done

またはあなたが使うことができますwatch

watch -n 120 printf '\33[0n'


なにprintf '\33[0n'?コマンドラインprintfとは何か知っています。しかし、何が印刷されていますか?
Trevor Boyd Smith、

1
\33エスケープキーの短縮形<esc>[0nは既知のANSIエスケープコードではありません。これはタイプミスであり、<esc>[0mANSIエスケープコードをサポートするアプリ/ターミナル/ ttyのターミナルカラーをリセットするものであると思います。
Drav Sloan 2018

12

これを.bash_profileの先頭に追加しますか?

if [ ! -z "$TMOUT" ]; then
  env -i bash --init-file ~/.bash_profile
fi

タイムアウトの決定を無効にした結果として膨大な数の古いセッションを実行したままにした場合、システム管理者の怒りに注意してください。


これは本当に悪です!
Ahi Tuna

1
-i引数は環境を消去します。より具体的で、次のように1つの変数のみを設定解除できます。env -u TMOUT bash --init-file〜/ .bash_profile
Dave Richardson

4

ここでは、事れる
セッション変数がされると、「読み取り専用」あなたがして、コマンドで現在のシェルプロセスを交換する必要が「実行」
だから、あなたの質問への答えは次のとおりです。

$> exec env TMOUT=0 bash

しかし、私はより高いタイムアウト値を設定することをお勧めします

$> exec env TMOUT=3600 bash

0

なぜ非インタラクティブセッションに切り替えないのですか?

# TMOUT=0
-bash: TMOUT: readonly variable
# unset TMOUT
-bash: unset: TMOUT: cannot unset: readonly variable
# su
# export TMOUT=10
# unset TMOUT
# 

0

私の場合、それは/etc/profile.d/bash_autologout.shで定義されています:

TMOUT=1800
readonly TMOUT
export TMOUT

それを見つけるために、私はしました:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.