আমি কীভাবে টিএমউक्स সেশনের নাম জানতে পারি?


13

সম্প্রতি, আমি ব্যবহার শুরু করি tmux। আমি এটি দেখতে সুন্দর লাগছি, তবে এই অ্যাপ্লিকেশনটি বুঝতে এখনও সমস্যা হচ্ছে। আমার কাছে থাকা একটি প্রাথমিক প্রশ্ন হ'ল: আমি কীভাবে জানব (কমান্ড লাইন থেকে) tmuxআমি যে সেশনটিতে লগইন করছি তার নাম কী ? যদি আমি কোনও tmuxসেশনে লগ হয় তবে এটির নামটি আমাকে বলবে। তবে যদি আমি কোনও tmuxসেশনে লগ না হয়ে থাকি তবে এটি কোনও কিছুই বা কোনও প্রকার ত্রুটি মুদ্রণ করবে।

উত্তর:


18

সেশনটির নাম ভেরিয়েবেলে সংরক্ষণ করা হয় #S, এটি একটি অ্যাক্সেস করতে, আপনি করতে পারেন

tmux display-message -p "#S"

আপনি যদি এটিতে ব্যবহার করতে চান তবে .tmux.confএটি সহজ #S। নোট করুন -pবিকল্পটি বার্তাটি স্টাডাউটে মুদ্রণ করবে, অন্যথায় বার্তাটি স্থিতি রেখায় প্রদর্শিত হবে ।

যদি উপরের কমান্ডটি একটি সেশনের অভ্যন্তরে ডাকা হয় তবে এটি সেশনের নামটি দেয়। যদি এটিকে কোনও সেশনের বাইরে ডাকা হয় তবে এটি এখনও চলমান শেষ অধিবেশনটির নাম দেয়। আমি সেশনের অভ্যন্তরে থাকি বা না থাকি কিনা তা পরীক্ষা করার জন্য আমি একটি কমান্ডটি খুঁজে পেলাম না , তাই আমাকে এই কাজটি সামনে আনতে হবে:

tmux list-sessions | sed -n '/(attached)/s/:.*//p'

tmux list-sessionsসমস্ত সেশন দেখায়, যদি একটি সংযুক্ত থাকে তবে (attached)এটি শেষে দেখায় । সঙ্গে আমরা সবাই আউটপুট (বিকল্প দমন -nযেখানে আমরা শব্দ খুঁজে ব্যতীত) (attached), এই লাইনে আমরা পরে everyhing দূরে কাটা :অধিবেশন নামে, যা পাতার আমাদের। এটি আমার পক্ষে একটি সেশনের অভ্যন্তরে এবং বাইরে বিরোধিতা হিসাবে কাজ করে tmux display-message -p "#S"

অবশ্যই এটি কাজ করে যদি সেশনটির নামে :এবং না থাকে and(attached)

ক্রিস জনসনের মন্তব্য অনুসারে , সেশনের অভ্যন্তরে কেউ রয়েছে কিনা তা যাচাই করার একটি উপায় হল এর পরিবেশ পরিবর্তনশীল সেট করা আছে কিনা তা দেখার জন্য:

[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"

1
এমনকি এটি সঠিক দেখাচ্ছে, আমাকে স্বীকার করতে হবে এটি আমার পক্ষে কার্যকর হয়নি। আমার দুটি কনসোল রয়েছে, একটিতে আমার tmuxসেশন রয়েছে এবং অন্যটিতে আমি tmuxসেশনের বাইরে । আমি যখন উভয় কমান্ড টাইপ করি তখন tmux display-message -p "#S"একই ফলাফল মুদ্রিত হয় এবং উভয় কমান্ডের রিটার্ন মান একই হয়।
e271p314

আমি একই আচরণ দেখতে পাচ্ছি। চারপাশের কাজের জন্য আমার আপডেট হওয়া উত্তরটি দেখুন।
pfnuesel

4
আপনি সম্ভবত টিএমইউক্স এনভায়রনমেন্ট ভেরিয়েবলের জন্য যাচাই করেই পালিয়ে যেতে পারেন (এটি সাধারণত একটি সেশনের অভ্যন্তরের প্রক্রিয়াগুলির জন্য নির্ধারিত হয়, এবং একটি সেশনের বাইরে সেট করা হয় না - এটি "বোকা প্রমাণ" নয়, কারণ কোনও কিছু TMUX সেট বা আনসেট করতে পারে এবং জিনিসগুলিকে বিভ্রান্ত করে তোলে, তবে এটি মোটামুটি নির্ভরযোগ্য হওয়া উচিত)। ইন ksh , ব্যাশ , zsh , ইত্যাদি:[[ -n "${TMUX+set}" ]] && tmux display-message -p "#S"
ক্রিস জনসেন

মন্তব্যের জন্য ধন্যবাদ. আমি অবশ্যই গণনা করি যে এটি একটি আরও মার্জিত উপায় এবং যথেষ্ট শক্ত। আমি আমার মন্তব্যে আপনার মন্তব্য যুক্ত করেছি।
pfnuesel

আমি যদি একই সাথে দুটি নামের সাথে দুটি টিএমএক্স সেশনের ভিতরে থাকি তবে কী হবে? এটা কি কাজ করে?
মিহাই ড্যানিলা

0

এখানে একবার দেখুন , এই পোস্টটি ব্যবহার করে আমি বুঝতে পেরেছিলাম যে tmuxক্লায়েন্টদের আলাদা করার জন্য একটি জিনিস হ'ল ttyসেগুলির নামগুলি কিন্তু tmuxসার্ভারের সম্পত্তি এবং যখন আমরা কোনও tmuxক্লায়েন্টের ভিতরে বা বাইরে থেকে সেশনের নামটি দেখি তখন একই । এর পরে, আমরা ব্যবহার করতে পারি tmux info | headযা ক্লায়েন্টের পিড এবং tty এবং সার্ভারের পিড প্রদর্শন করে।

tmux info | grep $$ | grep -q `ps -p $$ -o tty=`

নীচের কমান্ডের রিটার্ন মান 0 হয় যদি আমরা কোনও tmuxক্লায়েন্টের ভিতরে থাকি বা আমরা যদি tmuxক্লায়েন্টের বাইরে চলে যাই তবে শূন্য নয় । আপনি যদি এটি কোনও স্ক্রিপ্ট থেকে চালাচ্ছেন তবে নিশ্চিত হয়ে নিন যে আপনি p এর পরিবর্তে পিপিড ব্যবহার করেছেন যেহেতু tty শেল প্রক্রিয়াটির সাথে সম্পর্কিত যা আপনি চালাচ্ছেন স্ক্রিপ্টটি নয়।

tmuxTERM এনভায়রনমেন্ট ভেরিয়েবলটি দেখার মাধ্যমে আমরা আমাদের ক্লায়েন্টের ভিতরে বা বাইরের আছি কিনা তা জানতে একটি সহজ উপায় তবে কম শক্ত ust এটি প্রদর্শিত হয় যে ক্লায়েন্টের বাইরে এটি 'xterm' বলে তবে এর ভিতরে এটি 'স্ক্রিন' বলে। যাইহোক, আমি প্রথম উপায়টি আরও ভাল দেখতে পেয়েছি।


0

এখানে একটি পার্ল স্ক্রিপ্ট; এটিকে শেল স্ক্রিপ্ট বা শেল স্ক্রিপ্ট ফাংশন তৈরি করা পাঠকের কাছে একটি অনুশীলন।

#!/opt/local/bin/perl

use strict;
use warnings;

if (exists $ENV{'TMUX'}) {
    # session ID is the last element
    # /tmp/1s/ffkjhk76sdgn/T/tmux-771/default,16772,8
    my($id) = $ENV{'TMUX'};
    $id =~ s{^.*,(\d+)$}{$1};

    # get session name
    my($cmd) = q(tmux ls -F "#{session_name}: #{session_id}");
    open(IN, "$cmd |") || die qq([ERROR] Cannot open pipe from "$cmd" - $!\n);

    while (<IN>) {
        chomp;

        if (m{(^.*):\s+\$$id$}) {
            print "Session name: <$1>\n";
            exit 0;
        }
    }

    print "Unable to determine TMUX session name\n";
    exit 1;
}
else {
    print "Not in a TMUX session\n";

    exit 1;
}

এটি একটি TMUX সেশনে নিম্নলিখিত আউটপুট উত্পাদন করে:

<~> $ tmuxsessionname
Session name: <1>

<~> $ tmux rename-session "foobar"

<~> $ tmuxsessionname
Session name: <foobar>

একটি TMUX সেশনের বাইরে এটি নিম্নলিখিত উত্পাদন করে:

<~> $ tmuxsessionname
Not in a TMUX session

আপনি printবিবৃতিগুলি খনন করতে পারেন এবং যদি আপনি শেল স্ক্রিপ্ট বা অন্য কোনও ক্ষেত্রে এটি ব্যবহার করতে চান তবে কেবলমাত্র প্রস্থান কোডটি ব্যবহার করতে পারেন।

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