पता लगाएँ कि क्या आभासी टर्मिनल में चल रहा है?


12

मैं करना चाहते हैं स्वचालित लॉगइन करने के लिए tty1प्रवेश पर और उसके बाद का उपयोग vlockयह लॉक करने के लिए।

अगर मौजूदा टर्मिनल एक कंसोल वर्चुअल टर्मिनल (जैसे tty1) है, तो मैं बैश से कैसे पता लगा सकता हूं , ताकि मैं vlockलाइन में डाल सकूं .bash_profileऔर इसे लॉग इन करने के बाद ही चलाया जा सके tty1?


1
मुझे लगता है कि आपको शीर्षक "वर्चुअल टर्मिनल में चल रहा है तो पता लगाएं" में बदलना चाहिए क्योंकि ttyगलत मतलब समझा जा सकता है कि क्या वर्तमान शेल छद्म टर्मिनल डिवाइस से जुड़ा है।
जोसेफ आर।

@JosephR। यह इंगित करने के लिए धन्यवाद, निश्चित
किरी

@ जोसेफ: खराब कॉल। एक छद्म टर्मिनल डिवाइस p  ty है, tty नहीं। मूल शीर्षक पर वापस जाने के बारे में।
इंकिस मृसी

जवाबों:


14

आप ttyवर्तमान वर्चुअल टर्मिनल का नाम प्राप्त करने के लिए उपयोग कर सकते हैं , फिर एक caseस्टेटमेंट के साथ इसका परीक्षण कर सकते हैं :

#!/bin/sh

case $(tty) in /dev/tty[0-9]*)
    vlock ;;
esac

इससे भी बेहतर, यह मानने के बजाय कि सभी टर्मिनल लॉगिन शेल टटी हैं।
किरी

1
X को बाहर करने की कोई आवश्यकता नहीं है: यदि स्क्रिप्ट X के तहत एक टर्मिनल एमुलेटर में चल रही है, ttyतो टर्मिनल एमुलेटर के स्यूडोटर्मिनल को दिखाएगा, एक्स को चलाने वाले भौतिक टर्मिनल को नहीं।
गिल्स एसओ- बुराई को रोकें '21

5

यह आम तौर पर बस स्टैडिन (FD0) का परीक्षण करने के लिए पर्याप्त है:

[ -t 0 ] && echo "TTY available" || echo "No TTY available"

ठीक है, क्योंकि .bash_profileलॉगिन शेल पर कॉल किया जाता है और सामान्य जीयूआई लॉगिन में टर्मिनल नहीं होता है, इसलिए केवल टर्मिनल लॉगिन शेल एक ट्टी होना चाहिए। अच्छी खोज
किरी

1
यदि इस स्निपेट को एक बड़ी स्क्रिप्ट में शामिल किया गया था, जिसकी फ़ाइल से इसकी स्टड पुनर्निर्देशित थी, तो यह रिपोर्ट करेगा कि कोई TTY VT से चलाने पर भी उपलब्ध नहीं है।
जोसेफ आर।

1
@ जोसेफआर सही। जब स्क्रिप्ट इंटरेक्टिव इनपुट मान लेते हैं तो मान अक्सर विफलताओं से बचने के लिए cronया atनौकरियों के साथ होता है।
JRFerguson
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.