baca saja variabel TMOUT - solusi untuk menonaktifkan shell keluar secara otomatis ketika tidak ada aktivitas

10

Di sini kita memiliki variabel Bash hanya baca. Saya tidak diizinkan untuk menghapus variabel itu.

$ echo $TMOUT
1800

Sebagai solusinya saya menulis kalimat itu (bahwa sesi saya tidak keluar)

#!/usr/bin/perl

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

Apakah ada paket resmi (rpm) yang melakukan hal serupa (seperti kode Perl di atas) dalam repositori CentOS7 / RHEL7? Saya tidak suka membuka editor vim, saya ingin perintah.

Ivanov
sumber
4
Solusi biasa untuk ini hanya dijalankan catketika menjauh dari sesi Anda. Dan kemudian ^ C saat Anda kembali.
steve
Saya memberlakukan aturan yang sama karena saya memiliki orang-orang di tim saya yang membiarkan terminal terbuka selama berminggu-minggu berturut-turut. Sementara saya setuju 1800 agak rendah, itu pasti ada karena beberapa alasan. Orang-orang cenderung melihat penyimpangan seperti biasa ... sesi Anda akan menonjol seperti jempol yang sakit.
Rui F Ribeiro
ketika hanya baca, ketik:exec env TMOUT=0 bash
nightshift

Jawaban:

5

Anda dapat mengeluarkan perintah perl dari baris perintah ...

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

atau Anda dapat melakukan hal yang sama di shell (a sh/ bashexample):

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

Atau Anda bisa menggunakan watch:

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

Drav Sloan
sumber
apa printf '\33[0n'? saya tahu apa baris perintahnya printf. tetapi apa yang sedang dicetak?
Trevor Boyd Smith
1
\33adalah singkatan untuk kunci melarikan diri <esc>[0nbukan kode pelarian ANSI yang dikenal, saya membayangkan itu adalah kesalahan ketik dan seharusnya <esc>[0myang mengatur ulang warna terminal untuk aplikasi / terminal / tty yang mendukung kode pelarian ANSI.
Drav Sloan
12

Tambahkan ini ke awal .bash_profile Anda?

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

Waspadalah dengan murka para sysadmin jika Anda membiarkan trilyunan sesi lama berjalan karena mengalahkan aturan timeout mereka.

steve
sumber
Ini benar-benar jahat!
Ahi Tuna
1
Argumen -i menghapus lingkungan. Anda bisa lebih spesifik dan hanya menghapus variabel tunggal seperti: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson
4

Inilah masalahnya,
Ketika variabel sesi adalah "Hanya Baca" Anda harus mengganti proses shell saat ini dengan perintah oleh "exec"
Jadi, Jawaban untuk pertanyaan Anda adalah:

$> exec env TMOUT=0 bash

Tetapi saya merekomendasikan pengaturan nilai batas waktu yang lebih tinggi

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

Mengapa Anda tidak beralih ke sesi non-interaktif?

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

Saya kasus saya, ini didefinisikan dalam /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Untuk menemukannya, saya lakukan:

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