আমি কীভাবে বলতে পারি আমি বাশ স্ক্রিপ্ট থেকে টিএমএক্স সেশনে আছি কিনা?


53

আমি আমার রাখতে চান bash_profileএকটি Git সংগ্রহস্থলের এবং যাই হোক না কেন মেশিন আমি শেল এক্সেস আছে তা ক্লোন। যেহেতু আমি tmuxবেশিরভাগ সময়ে আছি user@hostশেল প্রম্পটে traditionalতিহ্যবাহী স্পট না হয়ে স্থিতি রেখায় আমার একটি স্ট্রিং থাকে।

tmuxযদিও আমি ব্যবহার করি সমস্ত সাইট ইনস্টল করেনি, বা আমি সর্বদা এটি ব্যবহার না করে। আমি যখন tmuxসেশনে থাকি না তখন সনাক্ত করতে এবং সেই অনুসারে আমার প্রম্পটটি সামঞ্জস্য করতে চাই। এখনও পর্যন্ত আমার অর্ধ-বেকড দ্রবণটি .bash_profileদেখতে এরকম কিছু দেখাচ্ছে:

_display_host_unless_in_tmux_session() {
    # ???
}
export PROMPT_COMMAND='PS1=$(_display_host_unless_in_tmux_session)${REST_OF_PROMPT}'

(প্রতিবার চেক করা সম্ভবত সেরা পন্থা নয়, সুতরাং এটি করার আরও ভাল পদ্ধতির জন্য আমি পরামর্শের জন্য উন্মুক্ত Bash বাশ স্ক্রিপ্টিং আমার ভুল নয়))

উত্তর:


72

Tmux TMUXপরিবেশগত পরিবর্তনকে tmux সেশনে সেট TERMকরে এবং সেট করে screen। এটি কোনও 100% নির্ভরযোগ্য সূচক নয় (উদাহরণস্বরূপ, আপনি screenভিতরে tmuxবা tmuxঅভ্যন্তরে চলছে কিনা তা সহজেই বলতে পারবেন না screen) তবে এটি অনুশীলনে যথেষ্ট ভাল হওয়া উচিত।

if ! { [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; } then
  PS1="@$HOSTNAME $PS1"
fi

আপনার যদি কোনও জটিল প্রম্পটে সেটটির মাধ্যমে এটি সংহত করার প্রয়োজন হয় PROMPT_COMMAND(যা বাশ সেটিং যা হয়, তাই রফতানি করা উচিত নয়):

if [ "$TERM" = "screen" ] && [ -n "$TMUX" ]; then
  PS1_HOSTNAME=
else
  PS1_HOSTNAME="@$HOSTNAME"
fi
PROMPT_COMMAND='PS1="$PS1_HOSTNAME…"'

Tmux ইনস্টল করা আছে কিনা তা পরীক্ষা করার প্রয়োজন হলে:

if type tmux >/dev/null 2>/dev/null; then
  # you can start tmux if you want
fi

যাইহোক, এই সমস্তটি into োকানো উচিত ~/.bashrc, নয় ~/.bash_profile( .bashrc এবং .bash_profile এর মধ্যে পার্থক্য দেখুন )। ~/.bashrcপ্রতিটি বাশ ইনস্ট্যান্সে চালিত হয় এবং শেল কাস্টমাইজেশন যেমন প্রম্পট এবং এলিয়াস ধারণ করে। ~/.bash_profileআপনি লগ ইন করার সময় চালিত হয় (যদি আপনার লগইন শেলটি বাশ হয়)। অদ্ভুতভাবে, ব্যাশ ~/.bashrcলগইন শেলগুলিতে পড়ে না, তাই আপনার ~/.bash_profileএতে থাকা উচিত

case $- in *i*) . ~/.bashrc;; esac

TMUX_PANEপাশাপাশি বিকল্প ভেরিয়েবল রয়েছে। আমি কেবল লক্ষ্য করেছি কারণ আপনার রেসিপিটি কার্যকর হয়নি। পরবর্তীতে আমি বুঝতে পারলাম যে আমি অযথা ব্যবহার করেছিল (এবং পরবর্তীকালে unsetএকটি শেল স্ক্রিপ্ট আমি আমার মাধ্যমে গুন করছি) একটি পরিবর্তনশীল .profile
0xC0000022L

[ "$TERM" = "screen" ]কাজ নাও করতে পারে। আমার ক্ষেত্রে, আমার স্ক্রিনটি screen-256রঙ হিসাবে প্রতিবেদন করছিল ।
স্টিভিডি

@ স্টেভিডি আমি মনে করি না যে টিএমউक्स এটি নিজেই করে, তবে এটি একটি বিতরণ প্যাচ বা কনফিগারেশন হতে পারে।
গিলস 'খারাপ হয়ে যাওয়া বন্ধ করুন'

2

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

if [[ "$TERM" =~ "screen".* ]]; then
  echo "We are in TMUX!"
else
  echo "We are not in TMUX :/  Let's get in!"
  # Launches tmux in a session called 'base'.
  tmux attach -t base || tmux new -s base
fi

এই কোড স্নিপেটে, আমি দেখতে চাই যে আমরা টিএমইউक्स পরিবেশে নেই কিনা, আমি এটি চালু করি। আপনি যদি এই .bashrcফাইলটির স্নিপেটটি আপনার ফাইলে রাখেন, আপনি যে কোনও সময় টার্মিনাল খোলার সময় স্বয়ংক্রিয়ভাবে টিএমইউএক্স চালাবেন! PS: উবুন্টু শেল পরীক্ষা করা হয়েছে।


1

পূর্ববর্তী উত্তর হিসাবে, ${TERM}ভেরিয়েবল পরীক্ষা করা কোণার কেস হতে পারে, tmuxনিজস্ব জীবনের মধ্যে পরিবেশের ভেরিয়েবল সেট করে:

v env | গ্রেপ -i tmux
TMUX = / tmp / 'tmux-1000 / ডিফল্ট, 4199,5
TMUX_PANE =% 9
TMUX_PLUGIN_MANAGER_PATH = / হোম / imil / .tmux / plugins / এখানে

আপনি কোনও tmuxপরিবেশের ভিতরে রয়েছেন কিনা তা পরীক্ষা করার জন্য , কেবলমাত্র পরীক্ষা করে দেখুন:

$ [ -z "${TMUX}" ] && echo "not in tmux"

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