Prom_command, ps1 या दूरस्थ ssh hostname के लिए tmux विंडो का नाम बदलें?


25

मैं अपने tmux विंडो शीर्षक को स्वचालित रूप से शीघ्र ही नाम बदलने के लिए सक्षम होना चाहूंगा ssh। "ssh" लेबल वाली 9 खिड़कियां खोलना वास्तव में बेकार है। Sysadmin का काम करने से मैं नई स्क्रीन खोलता हूं और अपने आसपास का नाम बदलने के लिए बहुत से ssh करता हूं।

एक बात जो मैंने देखी tmuxवो है xtermविंडो टाइटल को अपडेट करना ताकि मुझे लगे कि इसे जानना है।

कोई मदद? मैं भी वापस जाने के लिए तैयार होता screenअगर मुझे यह सुविधा मिल जाती।

जवाबों:


15

मैं इसे PS1सीधे तौर पर देखने का कोई तरीका नहीं जानता ।

हालाँकि, tmuxविंडो नाम सेट करने के लिए समान कमांड को समझता screenहै।

तो आप अपने ~/.bashrcया इस तरह एक समारोह को परिभाषित कर सकते हैं ~/.zshrc:

settitle() {
    printf "\033k$1\033\\"
}

और फिर settitleकहीं से भी कॉल करें ।

उदाहरण के लिए, आप इसे अपने PS1चर में शामिल कर सकते हैं , जैसे

PS1='$HOST:$PWD$(settitle $HOST:$PWD)$ '

या के माध्यम से PROMPT_COMMAND:

PROMPT_COMMAND='$(settitle $HOST:$PWD)'
# and don't change PS1

अब मुझे समझ में आया है कि आप tmuxअपने डेस्कटॉप पर चल रहे हैं, और आप चाहते हैं कि sshइसके बजाय hostname के कमांड हों ssh, यह बहुत आसान है।

settitleआपके स्थानीय में जोड़े जाने के बाद ~/.bashrc, आप यह करना चाहते हैं:

ssh() {
    settitle "$*"
    command ssh "$@"
    settitle "bash"
}

यदि आवश्यक हो तो बीश को ज़श के साथ बदलें, या कुछ और उपयुक्त।


यह वास्तव में दूरस्थ शीर्षक पर .bashrc सेटअप के साथ दूरस्थ बॉक्स के होस्टनाम के लिए विंडो का नाम नहीं है। धन्यवाद हालांकि मैंने कुछ चालाक सीखा।
user68782

यदि आप चाहते हैं कि आपके स्थानीय पक्ष में होस्टनाम है, तो यह बहुत आसान है। एक सेकंड में रुको ...
मिकेल

प्रतिभाशाली! धन्यवाद। क्षमा करें, मेरे अनुरोध की व्याख्या करने में मेरी अक्षमता के परिणामस्वरूप दो प्रश्न हुए। फिर से धन्यवाद!
user68782

चूँकि tmux अपने विंडो के शीर्षक को एक बार बदलता है, इसलिए यह बहुत जल्दी tmux द्वारा विंडो के शीर्षक में सामान्य परिवर्तन द्वारा अधिलेखित किया जा सकता है।
यूटाजार्हेड

धन्यवाद! मैंने इस्तेमाल किया PROMPT_COMMAND='settitle $HOSTNAME:$PWD'- चूंकि @ मिकेल कोड के साथ मुझे कोई होस्टनाम नहीं मिला और -bash: : No such file or directoryप्रत्येक कमांड प्रॉम्प्ट से पहले एक त्रुटि। यह मुझे लगता है कि $()बैश जो कुछ भी settitle रिटर्न निष्पादित करने की कोशिश करेगा । (मैं linux पर बैश चला रहा हूँ।)
tuomassalo

35

tmux rename-window -t${TMUX_PANE} "Title Text"

यह एक विंडो में tmux टाइटल सेट करने का उचित तरीका है। $ TMUX_PANE वैरिएबल tmux द्वारा सेट किया गया है और विभिन्न पैन के बीच अंतर करने के लिए उपयोग किया जाता है।


2
जैसा कि यह सक्रिय विंडो है, मुझे नहीं लगता कि -t${TMUX_PANE}यह आवश्यक है (कम से कम यह मेरे लिए नहीं था)।
क्रिस्टोफर

8
@Christopher अगर आप sleep 3खिड़कियां चला रहे हैं, कह रहे हैं, और स्विच करें, तो नींद पूरी होने पर प्रॉम्प्ट गलत विंडो को कमांड जारी करेगा। (यही कारण है कि मैं यहां आया था, +1)।
quornian

16

बस उन लोगों के लिए जो एक tux सत्र के शीर्षक को बदलने के लिए खोज करके यहाँ आए थे:

Ctrl+ B,$

यह आपको एक संकेत देगा, जहां आप सक्रिय सत्र का नाम बदल सकते हैं।

इसके बजाय सक्रिय विंडो उपयोग कोमा को बदलने के लिए:

Ctrl+ B,,

देखें: मैं tmux में एक सत्र का नाम कैसे बदलूँ?


8

मिकेल और यूटाहारहेड के उत्तर दोनों को मिलाकर, मैंने .zshrcइस समस्या को हल करने के लिए निम्नलिखित का उपयोग किया :

ssh() {
    tmux rename-window "$*"
    command ssh "$@"
    exit
}

मेरे पास डिफ़ॉल्ट रूप से सक्षम होने वाली स्वचालित विंडो का नामकरण है, और मुझे दूरस्थ होस्ट से बाहर निकलने के बाद इसे फिर से उपयोग करने का तरीका नहीं मिल रहा है। इस प्रकार, मैं सिर्फ खिड़की से पूरी तरह से बाहर निकलता हूं - मेरे वर्कफ़्लो के लिए कोई समस्या नहीं। यदि आप इसका नाम बदलकर 'बैश' रखना चाहते हैं, तो आप exitपंक्ति को बदल सकते हैं tmux rename-window "bash"


1
मैं hostname -sकमांड ssh "@ $" के बाद tmux rename-window का उपयोग कर रहा हूं , यह मूल रूप से मेरे "गेटवे" मशीन के शीर्षक को "रीसेट" करता है।
-रेई

7

के बजाय exitया tmux rename-window "bash"आप का उपयोग कर सकते हैं

ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
            tmux rename-window "$*"
            command ssh "$@"
            tmux set-window-option automatic-rename "on" 1>/dev/null
    else
            command ssh "$@"
    fi
}

यह सामान्य फ़ंक्शन को फिर से सक्रिय करता है जो अगले आदेशों के लिए स्वचालित रूप से विंडो का नाम बदल देता है।

ifसे ब्लॉक रोकता है (इसके बिना) का नाम बदलने tmuxसे वर्तमान विंडो ssh(से बाहर अन्य गोले पर इस्तेमाल किया आदेशों tmux)।


मैं सामान के if env | grep -q "TMUX_PANE"; thenबजाय गया हूं ps -p..., लेकिन समान सिद्धांत।
एटॉमिक्यूल्स

1

मुझे पता है कि यह एक लंबे समय से पहले उत्तर दिया गया है, लेकिन मुझे लगा कि मैं जोड़ दूंगा कि मैंने क्या पाया है और पाया (स्वीकार किए गए उत्तर के आधार पर) .. मैंने इसे अपने सभी सर्वरों के / etc / bashrc में जोड़ दिया है (आसान करने के लिए) कपड़े के साथ करते हैं, कठपुतली, आदि)

settitle() {
    printf "\033k$1\033\\"
}
bash_prompt_command() {
    settitle "`hostname -s`:$PWD"
}
PROMPT_COMMAND=bash_prompt_command

और यह स्क्रीन या स्क्रीन में स्वचालित रूप से विंडो नाम सेट करता है।


हम आंतरिक डीएनएस का उपयोग करते हैं, इसलिए hostname -sअतिरिक्त डोमेन सामग्री को निकालता है, ताकि server1.internal.local सिर्फ सर्वर 1 के रूप में दिखाई दे
ब्रायन

1

एक और समाधान ssh सत्र के बाद, अपने पिछले नाम के लिए सक्रिय विंडो का नाम बदलना होगा:

ssh() {

local code=0
local ancien

ancien=$(tmux display-message -p '#W')

if [ $TERM = tmux -o $TERM = tmux-256color ]; then

    tmux rename-window "$*"

    command ssh "$@"

    code=$?
else
    command ssh "$@"

    code=$?
fi

tmux rename-window $ancien

return $code
}

0

यह tmux 2.1स्थानीय स्तर पर और सर्वर पर और उसके साथ काम करता है:

ssh() {
    tmux set-option allow-rename off 1>/dev/null
    tmux rename-window "ssh/$*"
    command ssh "$@"
    tmux set-option allow-rename on 1>/dev/null
}

मुझे विंडोज़ नाम बदलने से पहले मैन्युअल रूप से अनुमति-नाम बदलने के विकल्प को अक्षम करना पड़ा - अन्यथा यह मेरे अधिकांश सर्वरों पर वर्तमान पथ में बदल गया (वहां भी zsh का उपयोग करके)। अच्छी बात यह है: यदि आप अनुमति-नाम बदलने के विकल्प को फिर से उपयोग करते हैं तो यह तुरंत काम करता है।


0

इसमें जोड़ें .profileया.bashrc

# Change window name for `tmux`
ssh() {
    if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
        #tmux rename-window "$(echo $* | cut -d . -f 1)"
        tmux rename-window "$(echo $* | cut -d @ -f 2)"
        command ssh "$@"
        tmux set-window-option automatic-rename "on" 1>/dev/null
    else
        command ssh "$@"
    fi
}

0

मैं इन सभी उदाहरणों पर ध्यान दूंगा:

command ssh "$@"

आप एग्ज़िटकोड को पकड़ना चाहते हैं, और इसके साथ फंक्शन से बाहर निकल सकते हैं, अन्यथा जैसी चीज़ें:

ssh server false

० लौटेगा।

command ssh"$@"
_exitcode=$?
#other code
exit $_exitcode

Ssh के रिटर्न कोड के साथ ssh से बाहर निकलेगा।

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