2010-12-17 18 views
5

मैं ओएसएक्स में बैश कमांड लाइन का उपयोग कर रहा हूं। मुझे पता है कि एएनएसआई एस्केप अनुक्रम \ 033 [21t वर्तमान टर्मिनल विंडो का शीर्षक पुनर्प्राप्त करेगा। तो, उदाहरण के लिए:एएनएसआई एस्केप अनुक्रमों का उपयोग करके बैश में टर्मिनल विंडो के शीर्षक को कैप्चर कैसे करें?

$ echo -ne "\033[21t" 
...sandbox... 
$ # Where "sandbox" is the title of the current terminal window 
$ # and the ... are some extra control characters 

मुझे क्या करना चाहते हैं एक स्क्रिप्ट में प्रोग्राम के रूप में इस जानकारी पर कब्जा है, लेकिन मैं इसे कैसे करना समझ नहीं कर सकते हैं। स्क्रिप्ट क्या सिर्फ कच्चे एएनएसआई भागने अनुक्रम को पकड़ता है। तो, आगे उदाहरण के लिए, इस छोटे से रूबी स्क्रिप्ट:

cmd = 'echo -ne "\033[21t"' 
puts "Output from echo (directly to terminal):" 
system(cmd) 
terminal_name=`#{cmd}` 
puts "\nOutput from echo to variable:" 
puts terminal_name.inspect 

निम्नलिखित उत्पादन का उत्पादन:

Output from echo (directly to terminal): 
^[]lsandbox^[\ 
Output from echo to variable: 
"\e[21t" 

मैं दूसरे मामले में जानकारी जानकारी टर्मिनल पर दिखाया मैच के लिए चाहते हैं, लेकिन इसके बजाय मुझे कच्चे कमांड अनुक्रम मिलता है। (मैंने सिस्टम() का उपयोग करने और आउटपुट को फ़ाइल में कैप्चर करने का प्रयास किया है - जो काम नहीं करता है।) क्या कोई इसे काम करने के लिए एक तरीका जानता है?

उत्तर

6

विस्तृत here के रूप में आपको काम करने के लिए गंदे चाल का उपयोग करना होगा।

#!/bin/bash 
# based on a script from http://invisible-island.net/xterm/xterm.faq.html 
exec < /dev/tty 
oldstty=$(stty -g) 
stty raw -echo min 0 
# on my system, the following line can be replaced by the line below it 
echo -en "\033[21t" > /dev/tty 
read -r x 
stty $oldstty 
echo $x 
:

यहाँ एक संशोधित स्क्रिप्ट है

संबंधित मुद्दे