tmux উইন্ডোর নামটি প্রম্পট_কম্যান্ড, PS1 বা রিমোট ssh হোস্টনামের নামকরণ করবেন?


25

আমি আমার tmux উইণ্ডো শিরোনামের সাথে স্বয়ংক্রিয়ভাবে prompt_command, ps1 বা শুধু একটি মেশিন আমি হোস্টনাম নাম পালটে আছে সক্ষম হতে চাই sshহতে। "ssh" লেবেলযুক্ত 9 টি উইন্ডো খোলা রাখা সত্যিই অকেজো। সিসাদমিনের কাজ করে আমি নতুন পর্দা খুলি এবং ম্যানুয়ালি তাদের পুনরায় নামকরণ করার জন্য অনেক কিছু ঘুরে দেখি।

একটি জিনিস আমি লক্ষ্য করেছি উইন্ডো শিরোনাম 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কমান্ডগুলির চেয়ে হোস্ট-নেম রাখার চেয়েছিলেন ssh, এটি অনেক সহজ।

আপনি settitleআপনার স্থানীয়তে যুক্ত করেছেন ~/.bashrc, আপনি যা করতে চান তা হ'ল এটিও যুক্ত করুন:

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

জ্যাশ, বা যদি প্রয়োজন হয় তবে আরও কিছু উপযুক্ত সঙ্গে ব্যাশ প্রতিস্থাপন করুন।


এটি রিমোট বাক্সে .bashrc সেটআপ থাকার সাথে রিমোট বাক্সের হোস্টনামে উইন্ডো শিরোনামটির নাম দেয় না। আমি কিছু চটজলদি শিখেছি যদিও আপনাকে ধন্যবাদ।
ব্যবহারকারী 68782

যদি আপনি চান সমস্ত হ'ল আপনার স্থানীয় দিকের হোস্ট-নেম, তবে এটি অনেক সহজ। এক সেকেন্ড থাকুন ...
মাইকেল

উজ্জ্বল! ধন্যবাদ. দুঃখিত, আমার অনুরোধটি ব্যাখ্যা করতে আমার অক্ষমতার ফলে দুটি প্রশ্নের জন্ম হয়েছিল। আবার, ধন্যবাদ!
ব্যবহারকারী 68782

Tmux যেমন একটি উইন্ডোতে তার উইন্ডো শিরোনাম পরিবর্তন করে, এটি খুব দ্রুত tmux দ্বারা উইন্ডো শিরোনামে সাধারণ পরিবর্তন দ্বারা ওভাররাইট করা যেতে পারে।
উটাহ জারহেড

ধন্যবাদ! আমি ব্যবহার করেছি PROMPT_COMMAND='settitle $HOSTNAME:$PWD'- যেহেতু @ মাইকেলের কোডের সাথে আমি কোনও -bash: : No such file or directoryকমান্ড প্রম্পটের আগে হোস্টনাম এবং ত্রুটি পাই নি । এটি আমার কাছে মনে হয় যে $()বশ যা কিছু settitle রিটার্ন কার্যকর করতে চেষ্টা করবে । (আমি লিনাক্সে বাশ চালাচ্ছি))
tuomassalo

35

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

এটি একটি উইন্ডোতে tmux শিরোনাম সেট করার সঠিক উপায়। $ TMUX_PANE ভেরিয়েবলটি tmux দ্বারা সেট করা হয়েছে এবং বিভিন্ন পেনের মধ্যে পার্থক্য করতে ব্যবহৃত হয়।


2
এটি সক্রিয় উইন্ডো হিসাবে, আমি -t${TMUX_PANE}এটি প্রয়োজনীয় বলে মনে করি না (কমপক্ষে এটি আমার পক্ষে ছিল না)।
ক্রিস্টোফার

8
@ ক্রিস্টোফার আপনি যদি চালাচ্ছেন, বলুন sleep 3এবং উইন্ডো স্যুইচ করুন, প্রম্পট অন্যথায় ঘুমটি সম্পূর্ণ হওয়ার পরে ভুল উইন্ডোতে আদেশটি দেবে। (এই কারণেই আমি এখানে এসেছি, +1)।
কোরানিয়ান

16

কেবলমাত্র এমন লোকদের জন্য যারা এখানে এসে টিএমউक्स সেশনের শিরোনামটি কীভাবে পরিবর্তন করবেন তা অনুসন্ধান করে:

Ctrl+ B,$

এটি আপনাকে একটি প্রম্পট দেবে, যেখানে আপনি সক্রিয় সেশনের নাম পরিবর্তন করতে পারেন।

সক্রিয় উইন্ডো পরিবর্তনের জন্য কোমা ব্যবহার করুন:

Ctrl+ B,,

দেখুন: আমি কীভাবে টিএমউজে একটি সেশনের নাম পরিবর্তন করব?


8

মাইকের এবং উটাহ জারহেড উভয়ের উত্তরগুলির সংমিশ্রণে, আমি .zshrcএই সমস্যাটি সমাধান করার জন্য নিম্নলিখিতটি ব্যবহার করেছি :

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

আমার ডিফল্টরূপে স্বয়ংক্রিয় উইন্ডোটির নামকরণ সক্ষম হয়েছে এবং দূরবর্তী হোস্ট থেকে বেরিয়ে যাওয়ার পরে এটি পুনরায় চালু করার কোনও উপায় খুঁজে পাচ্ছি না। সুতরাং, আমি কেবল উইন্ডোটি সম্পূর্ণভাবে প্রস্থান করি - আমার কর্মপ্রবাহের জন্য কোনও সমস্যা নয়। যদি আপনি এর নামকরণ করতে চান, বলুন, 'বাশ', আপনি exitলাইনটি প্রতিস্থাপন করতে পারেন tmux rename-window "bash"


1
আমি hostname -sssh "@ $" কমান্ডের পরে tmux পুনঃনামকরণ উইন্ডোটি ব্যবহার করছি , এটি মূলত আমার "গেটওয়ে" মেশিনে শিরোনামটি "পুনরায় সেট" করে।
Andrei

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

আমি জানি এটির উত্তর অনেক আগেই দেওয়া হয়েছিল, তবে আমি ভেবেছিলাম যে আমি যা শিথিল করেছি এবং যা পেয়েছি তা যুক্ত করব (স্বীকৃত উত্তরের ভিত্তিতে) .. আমি এটি আমার সমস্ত সার্ভারের / ইত্যাদি / বাশার্কে যুক্ত করেছি (সহজেই ফ্যাব্রিক, পুতুল ইত্যাদি দিয়ে করুন)

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

এবং এটি উইন্ডোটির নামটি স্বয়ংক্রিয়ভাবে স্ক্রিন বা tmux এ সেট করে।


আমরা অভ্যন্তরীণ hostname -sডিএনএস ব্যবহার করি, সুতরাং অতিরিক্ত ডোমেন স্টাফগুলি সরিয়ে দেয়, যাতে সার্ভার 1.intern.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স্থানীয়ভাবে এবং সার্ভারগুলিতে zsh এর জন্য এবং এর সাথে কাজ করে:

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

ফিরে আসবে 0।

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

Ssh এর রিটার্ন কোড সহ ssh প্রস্থান করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.