переменная TMOUT только для чтения - временное решение для автоматического отключения выхода из оболочки при отсутствии активности

10

У нас есть переменная Bash только для чтения. Мне не разрешено сбрасывать эту переменную.

$ echo $TMOUT
1800

В качестве обходного пути я написал эти строки (чтобы моя сессия не выходила)

#!/usr/bin/perl

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

Существует ли официальный пакет (rpm), который делает подобное (например, код Perl) в репозитории CentOS7 / RHEL7? Я не люблю открывать редактор vim, я хочу команду.

Иванов
источник
4
Обычное решение этого просто запустить, catкогда вы уходите от сеанса. А потом ^ C это по вашему возвращению.
Стив
Я ввел подобное правило, потому что в моей команде были люди, которые оставляли терминалы открытыми в течение нескольких недель подряд. Хотя я согласен с тем, что 1800 год - своего рода низкий уровень, он должен быть там по какой-то причине. Люди склонны замечать отклонения от обычного ... ваши сеансы будут выделяться, как больной большой палец.
Руи Ф Рибейро
когда он доступен только для чтения, введите:exec env TMOUT=0 bash
nighthift

Ответы:

5

Вы можете выполнять команды Perl из командной строки ...

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

или вы можете сделать то же самое в shell (a sh/ bashпример):

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

Или вы можете использовать watch:

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

Драв Слоан
источник
что такое printf '\33[0n'? я знаю , что командная строка printfявляется. а что печатается?
Тревор Бойд Смит
1
\33это условное обозначение для escape-ключа, <esc>[0nэто не известный управляющий код ANSI, я предполагаю, что это была опечатка, которая должна была <esc>[0mсбрасывать цвет терминала для приложений / Terminal / tty, которые поддерживают escape-коды ANSI.
Драв Слоан
12

Добавить это в начало вашего .bash_profile?

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

Остерегайтесь гнева сисадминов, если вы оставляете запущенные сеансы gazillion в результате нарушения их правил тайм-аута.

Стив
источник
Это действительно ЗЛО!
Ахи тунец
1
Аргумент -i уничтожает окружающую среду. Вы можете быть более конкретным и сбросить только одну переменную, например так: env -u TMOUT bash --init-file ~ / .bash_profile
Дейв Ричардсон
4

Дело в том, что
когда переменная сеанса «Только для чтения», вы должны заменить текущий процесс оболочки командой «exec».
Итак, ответ на ваш вопрос:

$> exec env TMOUT=0 bash

Но я рекомендую установить более высокое значение тайм-аута

$> exec env TMOUT=3600 bash
Альпер т. Turker
источник
0

Почему вы не переходите на неинтерактивный сеанс?

# TMOUT=0
-bash: TMOUT: readonly variable
# unset TMOUT
-bash: unset: TMOUT: cannot unset: readonly variable
# su
# export TMOUT=10
# unset TMOUT
# 
Даниэле Маркокки
источник
0

В моем случае это определяется в /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Чтобы найти это, я сделал:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
Dagos
источник