tylko do odczytu zmienna TMOUT - obejście problemu, aby wyłączyć automatyczne wyjście z powłoki, gdy nie ma aktywności


10

Mamy tutaj zmienną Bash tylko do odczytu. Nie wolno mi rozbroić tej zmiennej.

$ echo $TMOUT
1800

Aby obejść ten problem, napisałem te wiersze (że moja sesja się nie kończy)

#!/usr/bin/perl

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

Czy istnieje oficjalny pakiet (rpm), który działa podobnie (jak powyżej kod Perla) w repozytorium CentOS7 / RHEL7? Nie lubię otwierać edytora vim, życzę polecenia.


4
Zwykłym rozwiązaniem tego problemu jest po prostu catodejście od sesji. A potem ^ C po powrocie.
steve,

Narzuciłem podobną zasadę, ponieważ miałem w swoim zespole ludzi, którzy zostawili terminale otwarte przez wiele tygodni z rzędu. Chociaż zgadzam się, że 1800 jest trochę niski, musi być z jakiegoś powodu. Ludzie mają tendencję do zauważania odchyleń od zwykłych ... twoje sesje będą się wyróżniać jak obolały kciuk.
Rui F Ribeiro

gdy jest tylko do odczytu, wpisz:exec env TMOUT=0 bash
nocna zmiana

Odpowiedzi:


5

Możesz wydawać polecenia perla z wiersza poleceń ...

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

lub możesz zrobić to samo w powłoce (a sh/ bashexample):

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

Lub możesz użyć watch:

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


co jest printf '\33[0n'? wiem, co to printfjest linia poleceń . ale co jest drukowane?
Trevor Boyd Smith

1
\33jest skrótem, ponieważ klawisz Escape <esc>[0nnie jest znanym kodem ucieczkowym ANSI, wyobrażam sobie, że to literówka, która powinna <esc>[0mzresetować kolor terminala dla aplikacji / terminali / tty, które obsługują kody ucieczki ANSI.
Drav Sloan

12

Dodaj to na początku swojego .bash_profile?

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

Strzeż się gniewu sysadminów, jeśli porzucisz miliardy starych sesji w wyniku pokonywania ich limitów czasu.


To naprawdę ZŁO!
Ahi Tuna,

1
Argument -i usuwa środowisko. Możesz być bardziej konkretny i wyłączać tylko jedną zmienną, taką jak: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson

4

Oto,
kiedy zmienną sesji jest „Tylko do odczytu” , musisz zastąpić bieżący proces powłoki poleceniem „exec”
. Odpowiedź na twoje pytanie brzmi:

$> exec env TMOUT=0 bash

Ale zalecam ustawienie wyższej wartości limitu czasu

$> exec env TMOUT=3600 bash

0

Dlaczego nie przechodzisz na sesję nieinteraktywną?

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

0

W moim przypadku jest on zdefiniowany w /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Aby to znaleźć:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.