variável TMOUT somente leitura - solução alternativa para desativar automaticamente sair do shell quando não houver atividade

10

Temos aqui uma variável Bash somente leitura. Não tenho permissão para desmarcar essa variável.

$ echo $TMOUT
1800

Como solução alternativa, escrevi essas linhas (que minha sessão não sai)

#!/usr/bin/perl

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

Existe um pacote oficial (rpm) que seja semelhante (como acima do código Perl) em um repositório CentOS7 / RHEL7? Não gosto de abrir um editor de vim, desejo um comando.

Ivanov
fonte
4
A solução usual para isso é apenas executada catquando você se afasta da sua sessão. E então ^ C no seu retorno.
10249 steve
Eu impus uma regra semelhante porque havia pessoas em minha equipe que deixaram os terminais abertos por semanas seguidas. Embora eu concorde que 1800 seja meio baixo, ele deve estar lá por algum motivo. As pessoas tendem a notar desvios ao habitual ... suas sessões se destacam como um polegar dolorido.
Rui F Ribeiro
quando for somente leitura, digite:exec env TMOUT=0 bash
turno noturno

Respostas:

5

Você pode emitir comandos perl na linha de comando ...

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

ou você pode fazer o mesmo no shell (a sh/ bashexample):

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

Ou você pode usar watch:

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

Drav Sloan
fonte
o que é printf '\33[0n'? Eu sei o que é a linha de comando printf. mas o que está sendo impresso?
Trevor Boyd Smith
1
\33é uma abreviação para a chave de escape <esc>[0nnão é um código de escape ANSI conhecido, eu imagino que foi um erro de digitação e deveria ser o <esc>[0mque redefine a cor do terminal para apps / terminal / tty's que suportam códigos de escape ANSI.
Drav Sloan
12

Adicione isso ao início do seu .bash_profile?

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

Cuidado com a ira dos administradores de sistemas, se você deixar um zilhão de sessões antigas em execução como resultado de derrotar suas decisões de tempo limite.

Steve
fonte
Isto é verdadeiramente MAL!
Ahi Tuna
1
O argumento -i apaga o ambiente. Você pode ser mais específico e desabilitar apenas uma única variável como a seguinte: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson
4

Aqui está a questão:
quando a variável da sessão é "Somente leitura", você deve substituir o processo atual do shell pelo comando "exec".
Portanto, a resposta para sua pergunta é:

$> exec env TMOUT=0 bash

Mas eu recomendo definir um valor de tempo limite mais alto

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

Por que você não está mudando para uma sessão não interativa?

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

No meu caso, está definido em /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Para encontrá-lo, eu fiz:

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