2009-11-06 11 views
44

क्या शेल स्क्रिप्ट का उपयोग करके Screen-Title सेट करना संभव है?शेलस्क्रिप्ट से स्क्रीन-शीर्षक सेट करें

मैं कुंजी आदेश Strg+A Shift-A Name <Enter>

मैं कैसे एक खोल स्क्रिप्ट में कीस्ट्रोक्स का अनुकरण करने पर के बारे में एक घंटे के लिए खोजा भेजने की तरह कुछ के बारे में सोचा है, लेकिन जवाब नहीं मिला।

सहायता के लिए धन्यवाद!

Beerweasle

उत्तर

43

आप निम्नलिखित लाइनों का उपयोग कर स्क्रीन/टर्म शीर्षक सेट कर सकते हैं:

#!/bin/bash 

mytitle="Some title" 
echo -e '\033k'$mytitle'\033\\' 

[अद्यतन] - मैं भी समाधान नीचे @Espo द्वारा प्रस्तावित शामिल कर रहा हूँ अनुरोध द्वारा:

अपने टर्म संस्करण या अपने लिनक्स वितरण के आधार पर उपरोक्त पंक्ति या काम नहीं हो सकता है और आप टर्म-चूक की कोशिश कर सकते हैं:

#!/bin/bash 

mytitle="Some title" 
echo -e '\033]2;'$mytitle'\007' 

विवरण पर अधिक जानकारी के लिए देखें: http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 या नीचे @Espo द्वारा उत्तर का संदर्भ लें।

+9

इस के लिए काम नहीं किया मेजबान का एक बहुत के बीच अपनी पार्टी कॉन्फ़िगरेशन अनुकूलित करने के लिए पूरी अवधारणा कॉपी मुझे। मैंने xterm और कंसोल में (केडीई 4 से) परीक्षण किया। '" \ e] 2; शीर्षक \ a "' काम किया। –

+1

यह काम नहीं करेगा अगर "SendEvents को अनुमति दें" सक्षम है, जो यूबंटू के अंतिम संस्करणों में डिफ़ॉल्ट प्रतीत होता है: https://bugs.launchpad.net/ubuntu/+source/xterm/+bug/495733 –

+0

मुझे लगता है कि हम इस बात से सहमत हो सकता है कि कोई पकड़-समाधान नहीं है (सांस) .. यहां सबसे अच्छा उदाहरण कंसोल है जो * * * 033k (या \ ek) का उपयोग कर सकता है लेकिन \ e] 2 पसंद करता है; (या दूसरी तरफ .. जैसा कि \ e] 2; xterm डिफ़ॉल्ट लगता है) – Shirkrin

7
set_screen_title() 
{ 
    echo -ne "\ek$1\e\\" 
} 
19

http://www.faqs.org/docs/Linux-mini/Xterm-Title.html#s3 से

टर्म भागने दृश्यों

खिड़की और आइकन खिताब XTerm भागने दृश्यों का उपयोग करके एक चल xterm में बदला जा सकता है। निम्नलिखित दृश्यों को इस संबंध में उपयोगी होते हैं:

  • ESC]0;stringBEL - आइकन स्थापित करें नाम और विंडो शीर्षक स्ट्रिंग के लिए
  • ESC]1;stringBEL - स्ट्रिंग
  • करने के लिए सेट विंडो शीर्षक - स्ट्रिंग
  • ESC]2;stringBEL करने के लिए आइकन नाम सेट करें

जहां ESC एस्केप वर्ण (\ 033), और BEL घंटी चरित्र (\ 007) है।

के भीतर इन अनुक्रमों में से एक को प्रिंट करना xterm विंडो या आइकन शीर्षक बदलने के कारण होगा।

नोट: ये अनुक्रम अधिकांश xterm डेरिवेटिव्स, जैसे nxterm, रंग-xterm और rxvt पर लागू होते हैं। अन्य टर्मिनल प्रकार अक्सर अलग-अलग भाग निकलते हैं; उदाहरण के लिए परिशिष्ट देखें। xterm से बचने के अनुक्रमों की पूरी सूची फ़ाइल ctlseq2.txt देखें, जो xterm वितरण, या xterm.seq के साथ आता है, जो rxvt वितरण के साथ आता है।

इस तरह मेजबान और उपयोगकर्ता नाम के रूप भागने दृश्यों

जानकारी के लिए मुद्रण कि लगातार इस खोल के जीवन भर है, यह पर्याप्त बस खोल rc फ़ाइल में भागने स्ट्रिंग प्रतिध्वनित करने के लिए होगा :

echo -n "\033]0;${USER}@${HOST}\007" 

तरह उपयोगकर्ता नाम @ होस्ट नाम एक शीर्षक का उत्पादन करना चाहिए, खोल चर $ उपयोगकर्ता और $ होस्ट एक मानते हुए सही ढंग से सेट करें। इको के लिए आवश्यक विकल्प खोल से भिन्न हो सकते हैं (नीचे उदाहरण देखें)।

जानकारी है कि इस तरह वर्तमान कार्यशील निर्देशिका के रूप में खोल के जीवनकाल के दौरान बदल सकते हैं, के लिए, ये पलायन वास्तव में हर बार शीघ्र परिवर्तन लागू किया जाना चाहिए। इस तरह स्ट्रिंग हर आदेश आप जारी करने और इस तरह वर्तमान में काम कर रहे निर्देशिका, उपयोगकर्ता नाम, होस्ट नाम, आदि कुछ गोले इस उद्देश्य के लिए विशेष कार्य प्रदान के रूप में जानकारी का ट्रैक रखने सकता है के साथ अद्यतन किया जाता है, कुछ नहीं करते हैं और हम को सीधे शीर्षक स्ट्रिंग में शीर्षक अनुक्रम डालना होगा। यह अगले खंड में चित्रित किया गया है।

+0

स्क्रीन को समायोजित करने की आवश्यकता होती है, हालांकि स्क्रीन पूरी तरह से अनदेखा कर रही है, हालांकि मुझे "\ ekTITLE \ e \\" दोनों का उपयोग करके स्निपेट मिल गए हैं। और "\ e] 0; शीर्षक \ a" (उत्तरार्द्ध बिना किसी उपयोग के बाद)। शायद यह स्क्रीन "हार्डस्टैटस" सेटिंग से संबंधित है हालांकि - मैं निम्नलिखित का उपयोग कर रहा हूं: हार्डस्टैटस स्ट्रिंग "स्क्रीन @% एच:%-एन -% टी" (% टी विंडो शीर्षक को संदर्भित करता है) – blueyed

3

आप स्क्रीन फोन कर सकते हैं और यह बताने के लिए एक शीर्षक सेट करने के लिए:

screen -X title "new title" 

आप एक स्क्रीन विंडो में हैं, तो यह उस खिड़की का नाम तय करेंगे। यदि आप स्क्रीन पर नहीं हैं, तो यह हाल ही में खोला गया विंडो का नाम सेट करेगा।

1

Espo के जवाब देने के लिए जोड़ने के लिए, टर्म भागने दृश्यों भी बैश PS1 चर

ESC]0;stringBEL -- Set icon name and window title to string 
ESC]1;stringBEL -- Set icon name to string 
ESC]2;stringBEL -- Set window title to string 

उदाहरण

PS1='\e]0;string\a' 
10

अनुसरण कर रहे हैं अन्य तरीकों से करने के लिए स्क्रिप्ट के लिए स्क्रीन खिताब के नाम लागू किया जा सकता :

.ssh/config पर निम्न सेटिंग्स जोड़ना एक सिस्ट में लॉग इन करने पर स्वचालित रूप से स्क्रीन शीर्षक सेट करता है उन्हें SSH का उपयोग कर:

Host * 
    PermitLocalCommand yes 
    LocalCommand [ "$TERM" == 'screen' ] && echo -ne "\033k%h\033\\" 

%h है, जो मशीन आप के साथ कनेक्ट कर रहे हैं के होस्ट नाम का प्रतिनिधित्व करता है के बजाय, आप %n है, जो वास्तविक नाम/उर्फ ​​आप मशीन से कनेक्ट करने के लिए प्रयोग किया जाता है का उपयोग कर सकते हैं।

नोट: आपको Localhost% n और% h पैरामीटर का उपयोग करने में सक्षम होने के लिए OpenSSH> = v5.1 की आवश्यकता है। LocalCommand पर अधिक जानकारी के लिए 'man ssh_config' देखें।

स्वचालित रूप से शीर्षक वापस लौटने के लिए वापस स्थानीय होस्ट का होस्ट नाम की है कि, SSH सत्र बंद करने के बाद, आप एक एस्केप अनुक्रम आप के लिए शीघ्र चर .bashrc में PS1 जोड़ सकते हैं:

export PS1='you_favorite_PS1_here' 
if [ "$TERM" == 'screen' ]; then 
    export PS1=${PS1}'\[\033k\h\033\\\]' 
fi 

ये तरकीबें हैं .screenrc कॉन्फ़िगरेशन का उपयोग करते समय विशेष रूप से उपयोगी जो आपको वर्तमान में काम कर रहे स्क्रीन 'टैब' में दिखाता है। इस काम के पाने के लिए .screenrc को निम्नलिखित की तरह कुछ जोड़ें: जब ssh के साथ चारों ओर कूद

caption always "%{= kY}%-w%{= Yk}%n %t%{-}%+w%{ kG} %-= @%H - %LD %d %LM - %c" 
+0

'लोकल कमांड echo "$ TERM" | grep -q 'स्क्रीन' और&cho -ne "\ 033k% n \ 033 \\" ' tcsh –

8

आज़माएं नीचे दिए गए आदेश, किसी फ़ाइल या कॉन्फ़िगरेशन को संपादित करने की आवश्यकता नहीं है जैसे ~/.bashrc, रनटाइम पर उपयोग किया जा सकता है। शीर्षक के रूप में

सेट स्थिर पाठ: (मेरे शीर्षक)

export PS1='\[\e]0;My Title\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' 

सेट स्थानीय/शीर्षक के रूप में वैश्विक चर: ($ USER) के शीर्षक के रूप में

export PS1='\[\e]0;$USER\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' 

सेट आदेश उत्पादन : (होस्टनाम)

export PS1='\[\e]0;`hostname`\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' 
डिफ़ॉल्ट

सेट करने के लिए (वापस जाएं):

export PS1='\[\e]0;\[email protected]\h: \w\a\]${debian_chroot:+($debian_chroot)}\[email protected]\h:\w\$ ' 
+0

में भी काम करेगा जो मैं चाहता था कि धन्यवाद – Eun

+0

वह प्रॉम्प्ट बदलता है। – developerbmw

0
# add the following in your ~/.bashrc or ~/.bash_profile 
PROMPT_COMMAND='printf "\033]0;%[email protected]%s:%s\007" "${USER}" "${HOSTNAME%%.*}" "${PWD/#$HOME/~}"' 

या और भी बेहतर से here