chỉ đọc biến TMOUT - cách giải quyết để vô hiệu hóa tự động thoát khỏi vỏ khi không có hoạt động


10

Chúng ta có một biến Bash chỉ đọc. Tôi không được phép bỏ biến đó.

$ echo $TMOUT
1800

Như một cách giải quyết, tôi đã viết những dòng đó (rằng phiên của tôi không thoát)

#!/usr/bin/perl

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

Có gói chính thức (vòng / phút) nào tương tự (như mã Perl ở trên) trong kho lưu trữ CentOS7 / RHEL7 không? Tôi không muốn mở một trình soạn thảo vim, tôi muốn một lệnh.


4
Giải pháp thông thường cho việc này chỉ là chạy catkhi bước ra khỏi phiên của bạn. Và sau đó ^ C nó trên sự trở lại của bạn.
steve

Tôi áp đặt một quy tắc tương tự vì tôi có những người trong nhóm của mình đã để các thiết bị đầu cuối mở trong nhiều tuần liên tiếp. Trong khi tôi đồng ý 1800 là loại thấp, nó phải ở đó vì một số lý do. Mọi người có xu hướng nhận thấy sự sai lệch so với thông thường ... các phiên của bạn sẽ nổi bật như ngón tay cái đau.
Rui F Ribeiro

khi nó chỉ đọc, gõ:exec env TMOUT=0 bash
nighthift

Câu trả lời:


5

Bạn có thể phát lệnh perl từ dòng lệnh ...

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

hoặc bạn có thể làm tương tự trong shell (a sh/ bashexample):

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

Hoặc bạn có thể sử dụng watch:

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


printf '\33[0n'gì tôi biết dòng lệnh printflà gì Nhưng những gì đang được in?
Trevor Boyd Smith

1
\33là viết tắt của khóa thoát <esc>[0nkhông phải là mã thoát ANSI đã biết, tôi tưởng tượng đó là một lỗi đánh máy và nên <esc>[0mđặt lại màu của thiết bị đầu cuối cho các ứng dụng / thiết bị đầu cuối / tty hỗ trợ mã thoát ANSI.
Drav Sloan

12

Thêm phần này vào đầu .bash_profile của bạn?

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

Hãy coi chừng cơn thịnh nộ của các sysadins nếu bạn để lại một phiên họp cũ đang diễn ra do kết quả của việc đánh bại các phán quyết hết thời gian của họ.


Đây thực sự là EVIL!
Ahi Tuna

1
Đối số -i xóa sạch môi trường. Bạn có thể cụ thể hơn và chỉ bỏ đặt một biến duy nhất như vậy: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson

4

Đây là vấn đề,
Khi biến phiên là "Chỉ đọc", bạn phải thay thế quy trình shell hiện tại bằng lệnh "exec"
Vì vậy, Câu trả lời cho câu hỏi của bạn là:

$> exec env TMOUT=0 bash

Nhưng tôi khuyên bạn nên đặt giá trị thời gian chờ cao hơn

$> exec env TMOUT=3600 bash

0

Tại sao bạn không chuyển sang phiên không tương tác?

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

0

Tôi là trường hợp của tôi, nó được định nghĩa trong /etc/profile.d/bash_autologout.sh:

TMOUT=1800
readonly TMOUT
export TMOUT

Để tìm nó, tôi đã làm:

sudo find /etc/ -name "*" | xargs sudo grep "TMOUT" 2>&1 | grep -v "filter..."
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.