GNOME टर्मिनल - टैब शीर्षक में प्रक्रिया का नाम


9

मैं गनोम टर्मिनल टैब शीर्षक (या केवल एक टैब होने पर शीर्षक बार) में वर्तमान चालू प्रक्रिया का नाम कैसे डाल सकता हूं?

-- अपडेट करें --

स्पष्ट करने के लिए, मैं टैब शीर्षक को अद्यतन करना चाहता हूं जब मैं एक प्रक्रिया चलाता हूं, उदाहरण के लिए:

# title is currently "bash"
$ find / -name foo # while searching for foo, title is "find"
$ # title is once again "bash"
$ less /proc/cpuinfo # title changes to "less"
$ man ls # title changes to man
$ # title returns to "bash"

जवाबों:


8

मिल गया। यह साइट एक समाधान की एक अच्छी व्याख्या प्रदान करती है।
आपके bashrc में, ऐसा दिखेगा:

case "$TERM" in
xterm*|rxvt*)
    set -o functrace
    trap 'echo -ne "\e]0;$BASH_COMMAND\007"' DEBUG
    PS1="\e]0;\s\007$PS1"
    ;;
*)
    ;;
esac

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


2
एक अच्छा प्रश्न पूछने के लिए धन्यवाद। यह पहली बार में एक साधारण प्रश्न की तरह लग रहा था ... पहले 10 मिनट के बाद, यह मुझे पागल करना शुरू कर रहा था! इसलिए मैंने सोचा कि यह एक अच्छा सवाल था - सरल लगता है, लेकिन मुझे शेल, टर्मिनल और सिग्नल के बीच की बातचीत के बारे में कुछ गहरा सीखने के लिए मजबूर किया।
डेवपरिलो सेप

PS1-साइनमेंट क्यों ? यह मेरे लिए glibberish में परिणाम है, और यह वास्तव में यहाँ आवश्यक नहीं लगता है ...?
phil294

बस मेरे लिए त्रुटियाँ हैं।
Kzqai

4

खैर, जब से हर कोई पहले से ही डेविड पशली के समाधान को जान रहा है, मुझे आश्चर्य है कि मुझे यह खोजने में इतना समय लगा क्योंकि यह लगभग उतना ही पुराना है।

यह समाधान वास्तव में बैश-पूर्ण स्पैमिंग कचरा की देखभाल करता है।

स्पष्ट होने के लिए: मैंने अपने यहां कुछ भी नहीं किया, लेकिन शोध किया। सारा श्रेय मारियस गेदमिनस को जाता है ।

यह मेरे लिए ग्नोम-टर्मिनल / टर्मिनेटर के साथ पूरी तरह से काम करता है

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD}\007"'

    # Show the currently running command in the terminal title:
    # http://www.davidpashley.com/articles/xterm-titles-with-bash.html
    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                # The command is trying to set the title bar as well;
                # this is most likely the execution of $PROMPT_COMMAND.
                # In any case nested escapes confuse the terminal, so don't
                # output them.
                ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}: ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG
    ;;
*)
    ;;
esac

इसके अलावा यह एक क्रॉस-पोस्ट है क्योंकि मुझे इसके बारे में पता चला है और मैं इसे साझा करना चाहता हूं और मुझे लगता है कि यह यहां भी उपयोगी है।


2

नीचे काम करना चाहिए। मेरे पास .bash_functionsफ़ाइल में फ़ंक्शन है , और इसे .bashrcसेट करने से पहले फ़ाइल में स्रोत करें $PROMPT_COMMAND

function term_title
{
        history 1 | awk '{print $2}';
}

PROMPT_COMMAND='echo -ne "\033]0;"$(term_title)"\007"'

1
आप करीब हैं, लेकिन मेरे पास बहुत बेहतर नहीं है। यह आपको अंतिम निष्पादित कमांड देगा, लेकिन वास्तव में यह नहीं है कि बाद में क्या अशुद्धता है। मैंने सोचा कि बस टर्म_टाइल को बदलकर: `यदि [नौकरियों]; फिर इतिहास 1 | awk '{प्रिंट $ 2}'; इको-ईन 'बैश एम' फाई 'काम करेगा, लेकिन यह छोटी उम्र के साथ प्रक्रियाओं को पकड़ने के बारे में असंगत है और प्रक्रिया समाप्त होने पर भी यह वापस नहीं आता है। मुझे पता नहीं है कि उन ट्रिगर / घटनाओं के साथ कैसे गड़बड़ करना है।
डेवपिल्लो

bash प्रॉम्प्ट प्रदर्शित करने से ठीक पहले $ PROMPT_COMMAND निष्पादित करता है, इसलिए यह सबसे अच्छा है जो मैं इस दृष्टिकोण के साथ कर सकता हूं। अन्य ट्रिगर्स हो सकते हैं जो आपके एंटर के ठीक बाद निष्पादित हो सकते हैं, लेकिन मुझे उनके बारे में पता नहीं है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.