variable TMOUT en lecture seule - solution de contournement pour désactiver automatiquement la fermeture du shell en l'absence d'activité

10

Nous avons ici une variable Bash en lecture seule. Je ne suis pas autorisé à annuler cette variable.

$ echo $TMOUT
1800

Pour contourner ce problème, j'ai écrit ces lignes (pour que ma session ne se termine pas)

#!/usr/bin/perl

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

Existe-t-il un package officiel (rpm) similaire (comme le code Perl ci-dessus) dans un référentiel CentOS7 / RHEL7? Je n'aime pas ouvrir un éditeur vim, je souhaite une commande.

Ivanov
la source
4
La solution habituelle est juste exécutée catlorsque vous vous éloignez de votre session. Et puis ^ C à votre retour.
steve
J'ai imposé une règle similaire parce que des membres de mon équipe avaient laissé les terminaux ouverts pendant des semaines consécutives. Bien que je convienne que 1800 est un peu bas, il doit être là pour une raison quelconque. Les gens ont tendance à remarquer des écarts par rapport à l'habituel ... vos séances ressortiront comme un pouce endolori.
Rui F Ribeiro
en lecture seule, tapez:exec env TMOUT=0 bash
nighthift

Réponses:

5

Vous pouvez émettre des commandes perl à partir de la ligne de commande ...

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

ou vous pourriez faire la même chose dans le shell (un sh/ bashexemple):

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

Ou vous pouvez utiliser watch:

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

Drav Sloan
la source
c'est quoi printf '\33[0n'? je sais ce qu'est la ligne de commande printf. mais qu'est-ce qui est imprimé?
Trevor Boyd Smith
1
\33est un raccourci pour la touche d'échappement <esc>[0nn'est pas un code d'échappement ANSI connu, j'imagine que c'était une faute de frappe et devrait l'être <esc>[0mqui réinitialise la couleur du terminal pour les applications / terminaux / tty qui prennent en charge les codes d'échappement ANSI.
Drav Sloan
12

Ajoutez-le au début de votre .bash_profile?

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

Méfiez-vous de la colère des administrateurs système si vous laissez un million de sessions anciennes en cours d'exécution en raison de la défaite de leurs décisions d'expiration.

Steve
la source
C'est vraiment MAL!
Ahi Tuna
1
L'argument -i efface l'environnement. Vous pouvez être plus spécifique et ne supprimer qu'une seule variable comme ceci: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson
4

Voici la chose,
lorsque la variable de session est en "lecture seule", vous devez remplacer le processus shell actuel par la commande par "exec".
Ainsi, la réponse à votre question est:

$> exec env TMOUT=0 bash

Mais je recommande de définir une valeur de délai d'attente plus élevée

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

Pourquoi ne passez-vous pas à une session non interactive?

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

Dans mon cas, il est défini dans /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Pour le trouver, j'ai fait:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
dagos
la source