只读TMOUT变量–解决方法,可在无活动时禁用自动退出Shell


10

我们这里有一个只读的Bash变量。我不允许取消设置该变量。

$ echo $TMOUT
1800

作为一种解决方法,我写了这些行(我的会话不会退出)

#!/usr/bin/perl

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

在CentOS7 / RHEL7储存库中是否有一个类似(类似于上面的Perl代码)的官方软件包(rpm)?我不喜欢打开vim编辑器,我希望有一个命令。


4
通常的解决方案是cat在退出会话时运行。然后^ C它在您返回时。
史蒂夫

我之所以施加类似的规则,是因为我的团队中的人员连续几个星期离开了终端。我确实同意1800有点低,但出于某种原因它一定在那儿。人们倾向于注意到与平常的背道而驰...您的课程将像拇指酸痛一样脱颖而出。
Rui F Ribeiro

如果为只读,请输入:exec env TMOUT=0 bash
nightshift '18

Answers:


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是Escape键的简写,<esc>[0n不是已知的ANSI Escape码,我想这是一个错字,应该为<esc>[0m支持ANSI Escape码的应用程序/终端/ tty重置终端颜色。
Drav Sloan '18

12

将此添加到您的.bash_profile的开头吗?

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

如果您由于失败了超时规定而离开了庞大的旧会话,请当心系统管理员的愤怒。


这真是邪恶!
Ahi Tuna

1
-i参数清除环境。您可以更具体一些,仅取消设置单个变量,如下所示:env -u TMOUT bash --init-file〜/ .bash_profile
Dave Richardson

4

事情就是这样,
当会话变量是“只读”时,您必须用“ exec”命令替换当前的shell进程。
因此,对您问题的回答是:

$> exec env TMOUT=0 bash

但我建议设置更高的超时值

$> exec env TMOUT=3600 bash


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..."
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.