只读 TMOUT 变量 - 在没有活动时禁用自动退出 shell 的解决方法

Jos*_*ine 11 bash environment-variables timeout readonly

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

$ echo $TMOUT
1800
Run Code Online (Sandbox Code Playgroud)

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

#!/usr/bin/perl

$|++;
while (1) { print "\e[0n"; sleep 120; }
Run Code Online (Sandbox Code Playgroud)

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

ste*_*eve 15

将此添加到 .bash_profile 的开头?

if [ ! -z "$TMOUT" ]; then
  env -i bash --init-file ~/.bash_profile
fi
Run Code Online (Sandbox Code Playgroud)

如果您因为违反超时规则而让无数旧会话继续运行,请当心系统管理员的愤怒。

  • -i 参数会清除环境。您可以更具体,只取消设置单个变量,如下所示: env -u TMOUT bash --init-file ~/.bash_profile (2认同)

Dra*_*oan 5

您可以从命令行发出 perl 命令...

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

或者你可以在 shell (a sh/ bashexample) 中做同样的事情:

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

或者你可以使用watch

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


小智 5

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

$> exec env TMOUT=0 bash
Run Code Online (Sandbox Code Playgroud)

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

$> exec env TMOUT=3600 bash
Run Code Online (Sandbox Code Playgroud)