Tmux কমান্ড চালিয়ে, আমি কীভাবে বর্তমান tmux সেশন নামটি জানতে পারি


34

আমি একটি স্ক্রিপ্ট লিখছি। আমি সত্যিই এটি জানতে চাই। আমি আশা করি tmux এক্সিকিউটেবল আমাকে এটি বলতে পারেন।

আমি খুজি

tmux rename <newname>

বর্তমান অধিবেশনটির নতুন নামকরণ করতে পারেন। তবে আমি নিজের নাম আনার জন্য কোনও আদেশ পাচ্ছি না।

উত্তর:


49

সঙ্গে tmux 1.2 (এবং পরে), আপনি ব্যবহার করতে পারেন -pবিকল্প display-messageআউটপুট একটি বার্তা stdout- এ (একটি সংযুক্ত ক্লায়েন্ট এটা প্রদর্শন করার পরিবর্তে) করুন:

tmux display-message -p '#S'

#Sসেশনের নাম হিসাবে ফর্ম্যাট করা হয়েছে ( status-leftম্যান পৃষ্ঠায় বিকল্পের বিবরণ দেখুন )।


+1, আমার উত্তরের চেয়ে অনেক ভাল।
চিপনার

আমি সত্যিই প্রশংসা করি যে আপনি এটিটির জন্য tmux 1.2 প্রয়োজন বলে উল্লেখ করেছেন, এটি হ'ল ওপেনসুস 11.3 অটো অনলাইন আপডেটের জন্য উপলব্ধ সংস্করণ।
জিম্ম চেন

Tmux 1.8 সহ, আমি যখন এই অধিবেশনটিতে কাজ করছি না তখনও এটি সংযুক্ত অধিবেশনটির নাম দেয়।
মিহাই ড্যানিলা

টিম পিপলসের উত্তর নীচে tmux 1.8 এর সাথে কাজ করে এবং তারপরে তিনি উত্থিত পয়েন্টগুলিও সম্বোধন করেছেন। এটাই উত্তম উত্তর।
আলেকজান্দ্রোস

8

আমি অবাক হয়েছি যে, প্রায় 5 বছর পরেও, কেউই উল্লেখ করেনি যে এই উত্তরগুলির কোনওটিই পর্যাপ্ত নয়। যদিও উভয় উভয়ই সূক্ষ্মভাবে কাজ করে যতক্ষণ না বর্তমান টিটিওয়াই হোস্টের একমাত্র টিএমউक्स সেশনের সাথে সংযুক্ত থাকে, এই উত্তর দুটিই সমতল হয় যদি:

  1. বর্তমান টার্মিনাল সেশনটি কোনও টিএমউक्स সেশনের অংশ নয়, বা
  2. একাধিক, সংযুক্ত tmux সেশন রয়েছে

পূর্ববর্তী ক্ষেত্রে, উভয় উত্তর এখানে সংযুক্ত অধিবেশনটির নামটি ফিরিয়ে দেয় (বর্তমান টিটিটি অধিবেশন দ্বারা পরিচালিত হয় তা নির্বিশেষে)। পরবর্তী ক্ষেত্রে, ফলাফল সম্ভবত অনির্দিষ্ট হতে পারে বা একাধিক উত্তরের ফলস্বরূপ।

যথাযথ প্রশ্নটি হওয়া উচিত, "আমার বর্তমান টার্মিনাল অধিবেশনটি টিএমাক্স সেশনের সাথে সংযুক্ত টিএমএক্স সেশনের নাম কী?"

কারণ তিনি এই প্রশ্নের উত্তরের জন্য , কার্যকর করুন:

for s in $(tmux list-sessions -F '#{session_name}'); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$(tty)" | awk '{print $2}'

এটি tmux সেশনের সংখ্যা (সংযুক্ত বা অন্যথায়) নির্বিশেষে এবং বর্তমান টার্মিনাল অধিবেশনটি কোনও tmux সেশনের অংশ নয় কিনা তা নির্বিশেষে কাজ করে।


1
দুর্দান্ত উত্তর। প্রতিটি সেশনের নামটির পেনগুলি তালিকাভুক্ত করার পরিবর্তে আপনি প্রতিটি সেশনের পেনগুলি তালিকাভুক্ত করতে ব্যবহার tmux list-panes -a -F '#{pane_tty} #{session_name}'করতে পারেন। কীভাবে নতুন -aতা নিশ্চিত নয় , তাই ওয়াইএমএমভি।
ব্রায়ান ক্লাইন

এখানে বর্ণিত সমস্যা অনুসারে গ্রহণযোগ্য উত্তর ব্যবহার এবং ব্যর্থ হওয়ার পরে এই প্রশ্নে ফিরে এসেছেন। দয়া করে এটি উত্সাহিত করুন। সম্ভব হলে গ্রহণযোগ্য উত্তর পরিবর্তন করা উচিত।
আলেকজান্দ্রোস

1
একটি সাধারণ ডেস্কটপ সেটআপ TMUXচালানোর আগে পরিবেশের পরিবর্তনশীল যাচাইয়ের সাথে মিলিত হলে পদ্ধতি 1 কাজ করে tmux display-message -p '#S'
জিরোফেজ

8

সম্প্রসারিত / সংশোধন টিম-মানুষের এর উত্তর অনুযায়ী don_crissti এর মন্তব্য উপর এই কেন grep -vআশানুরূপ কাজ না?

টিম-পিপলসের উত্তরে "$ (tty)" কমান্ড

| গ্রেপ "$ (টিটিটি)" | |

প্রত্যাশার মতো সেই প্রসঙ্গে কাজ করবে না। এটি স্ট্রিংকে মূল্যায়ন করে না 'টিটিটি নয়'।

ভেরিয়েবলের পরিবর্তে এটি সমস্যার সমাধান করে।

TTY = $ (TTY)

...

| grep "$ tty" |

এছাড়াও, যখন কোনও টিএমউक्स সেশন উপস্থিত না থাকে, মূল কোডটি তৈরি করতে পারে

"/ tmp / tmux-1000 / default" তে কোনও সার্ভার চলছে না " ত্রুটি বার্তা।

অ্যাড করুন 2>/dev/nullএবং কোডটি ত্রুটি বার্তাটি প্রিন্ট না করে চলবে।

পরিবর্তিত কোডটি এই হিসাবে পড়ে:

tty=$(tty)
for s in $(tmux list-sessions -F '#{session_name}' 2>/dev/null); do
    tmux list-panes -F '#{pane_tty} #{session_name}' -t "$s"
done | grep "$tty" | awk '{print $2}'

1
উন্নতি কী? যদি এটি প্রয়োজনীয় হয় তবে এটিকে উত্তর না দিয়ে সম্পাদনা হিসাবে জমা দেওয়ার কথা বিবেচনা করা উচিত। এটির উত্তম উত্তর দেওয়ার জন্য আপনার আরও কিছু বর্ণনামূলক পাঠ্য সহ বিবেচনা করা উচিত।
শেঠ

1
@ সেথ, আমি মন্তব্য করতে চেয়েছিলাম কিন্তু অদ্ভুতভাবে এটি করার যথেষ্ট ক্রেডিট নেই।
উজ্জ্বল দিক

মন্তব্য করার জন্য আপনার 50 টি খ্যাতি দরকার । আপনার জটিলতা কোডের সাথে মন্তব্য করা ভাল ধারণা নয় কারণ আপনার লাইনের বিরতি ইত্যাদির অভাব রয়েছে। আপনার সম্পাদনা এটি একটি দুর্দান্ত উত্তর IMHO করেছে।
শেঠ

ওহ, আমি এখন এটি পেয়েছি। "টিটিটি" ইস্যুটি হতাশ জিনিস। আমি সেই খেলনা শেলটি ব্যবহার করি না: ডি
টিম পিপলস

1
@ টিমপিওলস যদিও এটি কোনও বাশ ইস্যু হতে পারে। আধুনিক টার্মিনালগুলিতে সামঞ্জস্যের জন্য বাশ এখনও কোড শেল স্ক্রিপ্টগুলির মান। অবশ্যই, পসিক্স আদর্শ আদর্শ; তবে, বাশের আরও কয়েকটি উন্নত টার্মিনালগুলির কিছু ভাগ রয়েছে। বাশকে আঘাত করে অন্যান্য বেশিরভাগ বড় টার্মিনালগুলির কেবলমাত্র কাজ করা উচিত। আমি কেবল শেল চেক চালাচ্ছি এবং একগুচ্ছ খারাপ ত্রুটি এবং ফর্ম্যাটিং সমস্যাগুলি ধরছি। (বেশিরভাগ বর্তমানের বর্ণনামূলক বাক্য
গঠনের

4
  • ক্রিস জনসেনের উত্তরটি কারওর বাইরে থেকে জিজ্ঞাসা করা সত্ত্বেও একটি সেশনের নাম দেয়।
  • উজ্জ্বল দিক এবং টিম পিপলস এর উত্তর একটি tty

পরিবর্তে, আমি এটি আমার জন্য সঠিকভাবে কাজ করতে পেলাম:

if [[ -n "$TMUX_PANE" ]]; then
    session_name=$(tmux list-panes -t "$TMUX_PANE" -F '#S' | head -n1)
fi

3

আদর্শ নয়, তবে আপনি এর সাথে সংযুক্ত অধিবেশনটির নামটি বের করতে পারেন awk:

tmux list-sessions -F '#{session_name} #{session_attached,yes,}' | awk '$2=="yes" {print $1}'

কাস্টম বিন্যাসটি ডিফল্টের তুলনায় পার্স করা একটু সহজ।

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