web-dev-qa-db-ja.com

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

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

$ echo $TMOUT
1800

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

#!/usr/bin/Perl

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

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

10
Ivanov

コマンドラインから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'

5
Drav Sloan

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

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

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

12
steve

ここにあるのは
セッション変数が"Read Only"の場合、現在のシェルプロセスを"exec"のコマンドに置き換える必要があります
つまり、あなたの質問に対する答えは:

$> exec env TMOUT=0 bash

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

$> exec env TMOUT=3600 bash
4
Alper t. Turker

私の場合、それは/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..."
0
dagos

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

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