टर्मिनल में उपलब्ध ऊर्ध्वाधर रेखाओं की संख्या मुझे कैसे पता चलेगी?


12

मैं एक स्क्रिप्ट लिख रहा हूं जो एक निर्देशिका के लिए git लॉग दिखाता है जब मैं उसमें cd करता हूं। इस तरह के एक लॉग भारी हो सकता है, जिसमें सैकड़ों लाइनें होती हैं। अब तक मुझे लगता है कि एक हार्ड-कोडेड 20 लाइनों ( ... | head -n 20) को सीमित किया गया है , जो काम पर स्क्रीन पर ठीक है, लेकिन घर पर छोटे मैकबुक स्क्रीन पर बहुत अधिक है।

मैं या तो टर्मिनल पर लगभग आधी (ऊर्ध्वाधर) स्क्रीन लेना पसंद करूंगा। और "टर्मिनल" भी बदलता है: यह काम पर Gnome टर्मिनल है, लेकिन घर पर iTerm2। और मैं स्क्रीन या tmux का उपयोग नहीं करता।

मैं कमांड लाइन से टर्मिनल में उपलब्ध ऊर्ध्वाधर लाइनों की संख्या कैसे पता करूं?

जवाबों:


21

टर्मिनल मापदंडों को $LINESऔर $COLUMNSचर के रूप में संग्रहीत किया जाता है।

इसके अतिरिक्त, आप विशेष टर्म-ऑपरेशन प्रोग्राम का उपयोग कर सकते हैं, उदाहरण के लिए tput:

tput lines  # outputs the number of lines of the present terminal window.
tput cols   # outputs the number of columns of the present terminal window.

9
LINESऔर COLUMNSकेवल कुछ गोले द्वारा निर्धारित किया जाता है। bashउन्हें सेट करता है, लेकिन केवल एक इंटरैक्टिव शेल के लिए (और यह उन्हें निर्यात नहीं करता है)।
18

1
मेरे varc में पर्यावरण var मौजूद नहीं है। इसके अलावा, मुझे आश्चर्य है कि यदि आप टर्मिनल विंडो का आकार बदलते हैं तो सिस्टम उन्हें रीसेट कर देगा। मेरे लिए tput और stty दोनों ही काम करते हैं, इसलिए मैंने कुछ नया सीख लिया :-)
jamesqf

@jamesqf बैश डॉक्यूमेंटेशन कहता है, "स्वचालित रूप से एक हस्ताक्षर की प्राप्ति पर सेट करें।" यदि आप टर्मिनल विंडो का आकार बदलते हैं, तो हां, यह उन्हें बदल देता है।
Celada

नीचे दिए गए विकल्पों के ऊपर ऑटोसैट के लिए निम्नलिखित विकल्प जिम्मेदार हैं shopt -s checkwinsizeजो /etc/bash.bashrcटिप्पणी के साथ मेरी फाइल में जोड़े गए हैं :# check the window size after each command and, if necessary, update the values of LINES and COLUMNS.
कोस्टास

9

यह कमांड आपको टर्मिनल पर लाइनों की संख्या देनी चाहिए:

stty size | cut '-d ' -f1

कुछ सिस्टम लागू नहीं हो सकते हैं stty sizeइसलिए आपको इसके बजाय कुछ इस तरह की आवश्यकता हो सकती है:

stty -a | tr \; \\012 | grep rows | tr -d ' rows'

1
यह बहुत ओएस-विशिष्ट लगता है। क्या आप उन प्रणालियों की सूची संकलित कर सकते हैं जहां प्रत्येक भस्म काम करती है?
वॉरेन यंग

4
मुझे डर था कि पहला ओएस विशिष्ट हो सकता है, यही वजह है कि मैंने दूसरा जोड़ा। वास्तव में थोड़ा सा Googling के बाद मैं देख रहा हूं कि पहला शायद सोलारिस पर काम नहीं करेगा। दूसरा एक बहुत पोर्टेबल होना चाहिए। ईमानदारी से, @ कोस्टास tput linesबेहतर जवाब की तरह लगता है और मैंने इसे उकेरा है। मैं इसके बारे में पहले नहीं जानता था।
सेलडा

1
मैं stty -aकुछ की तरह के साथ विकल्प लंबी पाइप की पेशकश करना चाहता हूंgrep -Po 'rows \K[^;]*'sed -n 's/.*rows \([^;]*\).*/\1/p'
कोस्टा

@ कॉस्टस वास्तव में, निराशा की बात है, न तो मेरी कमान और न ही आप में से किसी ने मैकओएस पर काम किया है, इसलिए मुझे अभी तक एक अलग कमांड (संपादित) के साथ आना पड़ा। जाओ आंकड़ा: MacOS "पंक्तियों 24" के बजाय "24 पंक्तियों" का उत्सर्जन करता है! मुझे अभी भी लगता tput linesहै कि बेहतर तरीका है, और मुझे लगता है कि यह बहुत पोर्टेबल है!
सेलदा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.