schreibgeschützte TMOUT-Variable - Problemumgehung zum Deaktivieren der automatischen Beendigung der Shell, wenn keine Aktivität vorhanden ist

9

Wir haben hier eine schreibgeschützte Bash-Variable. Ich darf diese Variable nicht deaktivieren.

$ echo $TMOUT
1800

Um dieses Problem zu umgehen, habe ich diese Zeilen geschrieben (damit meine Sitzung nicht beendet wird).

#!/usr/bin/perl

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

Gibt es ein offizielles Paket (U / min), das ähnliche Funktionen (wie oben im Perl-Code) in einem CentOS7 / RHEL7-Repository ausführt? Ich möchte keinen Vim-Editor öffnen, ich wünsche einen Befehl.

Ivanov
quelle
4
Die übliche Lösung hierfür wird nur ausgeführt, catwenn Sie sich von Ihrer Sitzung entfernen. Und dann ^ C es bei Ihrer Rückkehr.
Steve
Ich habe eine ähnliche Regel auferlegt, weil ich Leute in meinem Team hatte, die die Terminals wochenlang hintereinander offen ließen. Ich stimme zwar zu, dass 1800 ein bisschen niedrig ist, aber es muss aus irgendeinem Grund da sein. Die Leute neigen dazu, Abweichungen von den üblichen zu bemerken ... Ihre Sitzungen werden wie ein schmerzender Daumen auffallen.
Rui F Ribeiro
Wenn es schreibgeschützt ist, geben Sie exec env TMOUT=0 bash
Folgendes ein

Antworten:

5

Sie können Perl-Befehle über die Befehlszeile ausgeben ...

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

oder Sie könnten dasselbe in der Shell tun (ein sh/ bashBeispiel):

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

Oder Sie könnten verwenden watch:

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

Drav Sloan
quelle
was ist printf '\33[0n'? Ich weiß, was die Kommandozeile printfist. aber was wird gedruckt?
Trevor Boyd Smith
1
\33Die Abkürzung für den Escape-Schlüssel <esc>[0nist kein bekannter ANSI-Escape-Code. Ich stelle mir vor, es war ein Tippfehler, <esc>[0mder die Terminalfarbe für Apps / Terminals / Tty's zurücksetzen sollte , die ANSI-Escape-Codes unterstützen.
Drav Sloan
11

Fügen Sie dies zum Anfang Ihres .bash_profile hinzu?

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

Hüten Sie sich vor dem Zorn der Sysadmins, wenn Sie eine Unmenge alter Sitzungen laufen lassen, weil Sie ihre Timeout-Regeln besiegt haben.

Steve
quelle
Das ist wirklich böse!
Ahi Thunfisch
Das Argument -i löscht die Umgebung. Sie können spezifischer sein und nur eine einzelne Variable wie folgt deaktivieren: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson
3

Hier ist die Sache:
Wenn die Sitzungsvariable "Schreibgeschützt" ist , müssen Sie den aktuellen Shell-Prozess durch den Befehl durch "exec" ersetzen.
Die Antwort auf Ihre Frage lautet also:

$> exec env TMOUT=0 bash

Ich empfehle jedoch, einen höheren Timeout-Wert festzulegen

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

Warum wechseln Sie nicht zu einer nicht interaktiven Sitzung?

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

In meinem Fall ist es in /etc/profile.d/bash_autologout.sh definiert:

TMOUT=1800
readonly TMOUT
export TMOUT

Um es zu finden, habe ich:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
Dagos
quelle