sola lettura variabile TMOUT - soluzione alternativa per disabilitare l'uscita automatica della shell in assenza di attività


10

Abbiamo qui una variabile Bash di sola lettura. Non mi è permesso di cancellare quella variabile.

$ echo $TMOUT
1800

Come soluzione alternativa ho scritto quelle righe (che la mia sessione non si chiude)

#!/usr/bin/perl

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

Esiste un pacchetto ufficiale (rpm) simile (come sopra il codice Perl) in un repository CentOS7 / RHEL7? Non mi piace aprire un editor VIM, desidero un comando.


4
La solita soluzione a questo è solo eseguita catquando ti allontani dalla sessione. E poi ^ C al tuo ritorno.
steve

Ho imposto una regola simile perché avevo persone nella mia squadra che lasciavano i terminali aperti per settimane consecutive. Anche se concordo sul fatto che 1800 è un po 'basso, deve essere lì per qualche motivo. Le persone tendono a notare deviazioni dal solito ... le tue sessioni si distingueranno come un pollice dolorante.
Rui F Ribeiro,

quando è di sola lettura, digita:exec env TMOUT=0 bash
turno di notte

Risposte:


5

È possibile emettere comandi perl dalla riga di comando ...

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

o potresti fare lo stesso nella shell (un sh/ bashesempio):

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

Oppure potresti usare watch:

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


che cos'è printf '\33[0n'? so qual è la riga di comando printf. ma cosa viene stampato?
Trevor Boyd Smith,

1
\33è una scorciatoia per la chiave di escape <esc>[0nnon è un codice di escape ANSI noto, immagino fosse un errore di battitura e dovrebbe essere stato <esc>[0mche reimposta il colore del terminale per app / terminali / tty che supportano i codici di escape ANSI.
Drav Sloan,

12

Aggiungi questo all'inizio del tuo .bash_profile?

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

Fai attenzione all'ira degli amministratori di sistema se lasci un gazillion di vecchie sessioni in esecuzione a causa della sconfitta delle loro decisioni di timeout.


Questo è veramente MALE!
Ahi Tuna,

1
L'argomento -i cancella l'ambiente. Puoi essere più specifico e disinserire una sola variabile in questo modo: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson

4

Ecco la cosa,
quando la variabile di sessione è "Sola lettura" devi sostituire l'attuale processo di shell con il comando "exec".
Quindi, la risposta alla tua domanda è:

$> exec env TMOUT=0 bash

Ma consiglio di impostare un valore di timeout più elevato

$> exec env TMOUT=3600 bash

0

Perché non stai passando a una sessione non interattiva?

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

0

Nel mio caso, è definito in /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Per trovarlo, ho fatto:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.