อ่านเฉพาะ TM TM variable - วิธีแก้ปัญหาเพื่อปิดการใช้งานออกจากเชลล์โดยอัตโนมัติเมื่อไม่มีกิจกรรม


10

เรามีตัวแปร Bash แบบอ่านอย่างเดียวที่นี่ ฉันไม่ได้รับอนุญาตให้ยกเลิกการตั้งค่าตัวแปรนั้น

$ echo $TMOUT
1800

เป็นวิธีแก้ปัญหาฉันเขียนบรรทัดเหล่านั้น (ที่เซสชันของฉันไม่ออก)

#!/usr/bin/perl

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

มีแพ็คเกจอย่างเป็นทางการ (รอบต่อนาที) ที่คล้ายกัน (เช่นรหัส Perl ด้านบน) ในที่เก็บ CentOS7 / RHEL7 หรือไม่? ฉันไม่ชอบที่จะเปิดโปรแกรมแก้ไขเป็นกลุ่มฉันต้องการคำสั่ง


4
วิธีแก้ปัญหาตามปกติสำหรับการดำเนินการนี้เป็นเพียงการเรียกใช้catเมื่อก้าวออกจากเซสชันของคุณ และจากนั้น ^ C เมื่อคุณกลับมา
สตีฟ

ฉันกำหนดกฎที่คล้ายกันเพราะฉันมีคนในทีมของฉันที่เปิดเครื่องทิ้งไว้เป็นเวลาหลายสัปดาห์ติดต่อกัน ในขณะที่ฉันเห็นด้วยกับ 1800 ต่ำชนิดนั้นจะต้องมีด้วยเหตุผลบางอย่าง ผู้คนมักจะสังเกตเห็นการเบี่ยงเบนไปตามปกติ ... เซสชันของคุณจะโดดเด่นเหมือนนิ้วโป้งที่เจ็บ
Rui F Ribeiro

เมื่อเป็นแบบอ่านอย่างเดียวให้พิมพ์:exec env TMOUT=0 bash
nightshift

คำตอบ:


5

คุณสามารถออกคำสั่ง perl จากบรรทัดคำสั่ง ...

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

หรือคุณสามารถทำเช่นเดียวกันในเชลล์ ( ตัวอย่าง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ที่ถูกรีเซ็ตสีเทอร์มินัลสำหรับแอพ / เทอร์มินัล / tty ที่รองรับรหัสหลบหนี ANSI
Drav Sloan

12

เพิ่มสิ่งนี้ไปยังจุดเริ่มต้นของ. bash_profile ของคุณหรือไม่

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

ระวังความโกรธแค้นของ sysadmins ถ้าคุณออกจากเซสชันเก่า gazillion ที่ทำงานเป็นผลมาจากการเอาชนะการหมดเวลาคำวินิจฉัยของพวกเขา


นี่คือความชั่วร้ายอย่างแท้จริง!
Ahi Tuna

1
อาร์กิวเมนต์ -i ลบล้างสภาพแวดล้อม คุณสามารถเจาะจงมากขึ้นและยกเลิกการตั้งค่าตัวแปรเดียวเช่น: env -u TMOUT bash --init-file ~ / .bash_profile
Dave Richardson

4

นี่คือสิ่งที่
เมื่อตัวแปรเซสชันคือ"อ่านอย่างเดียว"คุณต้องแทนที่กระบวนการเชลล์ปัจจุบันด้วยคำสั่งโดย"exec"
ดังนั้นคำตอบสำหรับคำถามของคุณคือ:

$> exec env TMOUT=0 bash

แต่ฉันขอแนะนำให้ตั้งค่าการหมดเวลาที่สูงขึ้น

$> exec env TMOUT=3600 bash

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..."
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.