और मत कहो " $TERM" - यह हमेशा है xterm।
कोई bashस्क्रिप्ट कैसे बता सकती है कि वह किस टर्मिनल में चल रही है, विशेष रूप से यह iTerm, Terminal.app या वास्तव में एक xterm है या नहीं?
मैं पूछता हूं क्योंकि resetटर्मिनल.app और iTerm2 पर बॉक्स से बाहर काम नहीं करता है। iTerm2, हालांकि, टर्मिनल रीसेट ( \x1b]50;ClearScrollback\x07) करने के लिए भागने के क्रम को पहचानता है , और अगर मैं इसका पता लगा सकता हूं, तो मैं resetएक उपनाम के साथ ओवरराइड कर सकता हूं जो सही काम करता है। AFAICT, Terminal.app में रीसेट अनुक्रम का अभाव है, और लोग उस के आसपास हैक करने के लिए हास्यास्पद टॉम-हैकरी का सहारा लेते हैं ।
यहां मेरा अंतिम लक्ष्य resetवही काम करना है, चाहे मैं ओएस एक्स या लिनक्स पर काम कर रहा हूं, स्थानीय रूप से काम कर रहा हूं या एसएसएच के माध्यम से दूरस्थ रूप से काम कर रहा हूं। (मैं यह याद रखने की कोशिश नहीं करना चाहता कि कौन सा है, और यह reset && command-that-outputs-a-bunchकाम करने के लिए उपयोगी है और अप-एंट्री कार्य है।) Terminal.app और iTerm resetसही तरीके से लागू नहीं करके इस योजना में एक रिंच फेंक रहे हैं ।
इसका मतलब यह है कि बस ओवरराइडिंग resetयह काफी नहीं है: अगर मैं लिनक्स मशीन पर हूं, तो यह जानना आवश्यक है कि मैं gnome-terminalसही भागने के क्रम को भेजने के लिए उपयोग कर रहा हूं या iTerm।
क्या कोई रास्ता है (भले ही मुझे ज़रूरत है ioctl) टर्मिनल से यह पूछने के लिए कि यह वास्तव में क्या है?
, इस प्रश्न के प्रयोजनों के लिए, स्क्रीन को रीसेट करना चाहिए, कर्सर को रीसेट करना चाहिए, और स्क्रॉलबैक बफर को मिटा देना चाहिए।
reset, क्योंकि मेरी उंगलियों को पता है।
resetटर्मिनल इम्यूलेटर के स्क्रॉल-बैक सामग्री को साफ़ करने के लिए कमांड की अपेक्षा कर रहे हैं , लेकिन ऐसा करने की गारंटी नहीं है, क्योंकि स्क्रॉल-बैक एक टर्मिनल एमुलेटर-विशिष्ट सुविधा है, वास्तव में नहीं एक टर्मिनल का हिस्सा। हालांकि, टर्मिनल स्क्रॉल-बैक को मिटाने के लिए ED (Erase in Display) एस्केप सीक्वेंस के विस्तार का समर्थन करता है ESC [ 3 J। आप स्क्रीन को साफ़ कर सकते हैं, फिर उसका उपयोग कर सकते हैं, जैसे,reset && printf '\e[3J’
xterm(के माध्यम से TERM=xterm) घोषित करते हैं तो मैं उम्मीद करूंगा कि आप एक्सटर्म के एक सुपरसेट का अनुकरण करें, जो रीसेट पर अपने स्क्रॉलबैक को साफ करता है। (जैसे कि यदि आपने "ब्लू" के लिए एस्केप सीक्वेंस भेजा है, तो आप नीले रंग की अपेक्षा करेंगे।) दी, मेरे एक्सटरम ने मुझे बताया Erase is backspace., जो कि मैं आभारी हूं और कुछ नहीं करता; यह सिर्फ गुस्सा है।
Terminal.appसेटिंग, टर्मिनल टैब और स्क्रोलबैक लाइन्स को 0 पर खोलते हैं तो क्या होगा ? क्या यह वर्तमान लाइन के ऊपर किसी भी और सभी पाठ को अक्षम करता है, या स्क्रीन के शीर्ष के ऊपर कुछ भी? मुझे पता है, यह बिल्कुल वैसा नहीं है जैसा आपने पूछा था, एक शॉट के लायक।