variable de solo lectura TMOUT: solución alternativa para deshabilitar la salida automática del shell cuando no hay actividad

10

Tenemos aquí una variable Bash de solo lectura. No se me permite desarmar esa variable.

$ echo $TMOUT
1800

Como solución alternativa, escribí esas líneas (para que mi sesión no salga)

#!/usr/bin/perl

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

¿Hay un paquete oficial (rpm) que sea similar (como el código Perl anterior) en un repositorio CentOS7 / RHEL7? No me gusta abrir un editor vim, deseo un comando.

Ivanov
fuente
44
La solución habitual a esto solo se ejecuta catal alejarse de su sesión. Y luego ^ C a tu regreso.
Steve
Impuse una regla similar porque tenía personas en mi equipo que dejaban terminales abiertas durante semanas seguidas. Si bien estoy de acuerdo en que 1800 es un poco bajo, debe estar allí por alguna razón. Las personas tienden a notar desviaciones de lo habitual ... sus sesiones se destacarán como un dolor de pulgar.
Rui F Ribeiro
cuando es de solo lectura, escriba:exec env TMOUT=0 bash
turno de noche

Respuestas:

5

Puede emitir comandos perl desde la línea de comandos ...

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

o podrías hacer lo mismo en shell (a sh/ bashexample):

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

O podrías usar watch:

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

Drav Sloan
fuente
lo que es printf '\33[0n'? Sé cuál es la línea de comando printf. pero que se imprime?
Trevor Boyd Smith
1
\33es una forma abreviada de que la tecla de escape <esc>[0nno es un código de escape ANSI conocido, imagino que fue un error tipográfico y debería ser el <esc>[0mque restablece el color del terminal para aplicaciones / terminales / tty que admiten códigos de escape ANSI.
Drav Sloan
12

Agregue esto al inicio de su .bash_profile?

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

Tenga cuidado con la ira de los administradores de sistemas si deja un millón de sesiones antiguas en ejecución como resultado de derrotar sus decisiones de tiempo de espera.

Steve
fuente
¡Esto es realmente MALO!
Ahi Tuna
1
El argumento -i borra el medio ambiente. Puede ser más específico y solo desarmar una sola variable de esta manera: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson
4

Aquí está la cosa,
cuando la variable de sesión es "Solo lectura" , debe reemplazar el proceso de shell actual con el comando por "exec".
Entonces, la respuesta a su pregunta es:

$> exec env TMOUT=0 bash

Pero recomiendo establecer un valor de tiempo de espera más alto

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

¿Por qué no estás cambiando a una sesión no interactiva?

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

En mi caso, se define en /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Para encontrarlo, hice:

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