কমান্ড দ্বারা জিনোম টার্মিনাল প্রম্পট স্ট্রিংয়ের বিন্যাস টগল করুন?


9

আমার টার্মিনালটিতে এর মতো একটি ডিফল্ট প্রম্পট ফর্ম্যাট রয়েছে:

ব্যবহারকারীর নাম @ বক্সনাম / পাথ / থেকে / বর্তমান / ডিরেক্টরি $ $

কোডটি এটি তৈরি করে এটির মতো দেখাচ্ছে: (এর কিছু রঙ সংজ্ঞাও রয়েছে)

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'

যদি বর্তমান ডিরেক্টরিটিতে যাওয়ার পথটি দীর্ঘ হয় তবে টার্মিনালের সাথে কাজ করা অপ্রীতিকর হয়ে যায় কারণ আপনি ক্রমাগত লাইনগুলি ভঙ্গ করেন। এই জাতীয় ক্ষেত্রে আমি এমন একটি ফর্ম্যাট পছন্দ করবো যা এর মতো একটি সংক্ষিপ্ত স্ট্রিং উত্পাদন করে:

ব্যবহারকারীর নাম @ বক্সনাম কারেন্ট_ডির_নাম $ $

কোডটি এটি তৈরি করে এটির মতো দেখতে (আবার রঙ সহ):

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'

কেউ কি জানে কিভাবে আমি পারতাম সহজে উদাহরণস্বরূপ শুধু টাইপ করে এক অন্য শৈলী থেকে বর্তমান টার্মিনাল উইন্ডোর বিন্যাস টগল: prompttoggle?


6
আপনি কি বাশের PROMPT_DIRTRIM পরামিতি সম্পর্কে সচেতন ?
স্টিল্ড্রাইভার

@ স্টিল্ড্রাইভার এখনও অবধি নেই। এর মধ্যে টগল করা বিভিন্ন মানগুলির মধ্যে টগল করার চেয়ে সহজ বলে মনে হয় PROMPT_DIRTRIM=0এবং ফলাফলটি প্রায় একই। তথ্যের জন্য ধন্যবাদ! PROMPT_DIRTRIM=1PS1
রোটেরেটি

একটি ব্যবহার PROMPT_DIRTRIMকরে কমান্ডে যুক্তি যুক্ত হতে পারে। যদি আপনি কোনও যুক্তি পাস না করেন তবে আপনি টগল করেন PROMPT_DIRTRIM=0এবং PROMPT_DIRTRIM=1এবং যদি আপনি একটি সংখ্যাটিকে আর্গুমেন্ট হিসাবে সেট PROMPT_DIRTRIMকরেন তবে আপনি সেট করেছেন। promptlenকমান্ডের জন্য তখন আরও উপযুক্ত নাম হবে।
রোটারেটি

উত্তর:


10

আপনার দীর্ঘ এবং সংক্ষিপ্ত PS1ভেরিয়েবল দুটি পৃথক নামে সংরক্ষণ করুন:

PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'

PS1প্রাথমিকভাবে সেগুলির একটিতে সেট করা নিশ্চিত করুন :

PS1="$PS1long"

তারপরে আপনি দুটি পিএস 1 মানগুলির মধ্যে টগল করার জন্য এই জাতীয় একটি উপাধি তৈরি করতে পারেন:

alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'

আপনার ~/.bashrcফাইলে চারটি লাইন যুক্ত করা আপনার ব্যাশ সেশনে উপলব্ধ কমান্ডকে আরও শক্তিশালী করে তুলবে, আরও সহজে অনুলিপি করার জন্য সেগুলি এখানে:

PS1short='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
PS1long='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
PS1="$PS1long"
alias prompttoggle='if test "$PS1" = "$PS1long" ; then PS1="$PS1short" ; else PS1="$PS1long" ; fi'

7

আপনি একটি ছোট bashফাংশন ব্যবহার করতে পারেন :

prompttoggle () { 
    if [[ $PS1 = *basename* ]]; then 
        export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
    else 
        export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
    fi ;}

ম্যাচ উপরের ফাংশন বর্তমান যদি $PS1রয়েছে basename, হ্যাঁ, তাহলে PS1ছাড়া basenameঅন্যথায় সঙ্গে এক সেট করা হয় basenameসেট করা হয়।

~/.bashrcসমস্ত ইন্টারেক্টিভ সেশনে এটি উপলব্ধ করার জন্য আপনার কার্যটি এতে রাখুন ।

উদাহরণ:

foo@bar:~/spam/egg$ prompttoggle () { 
>     if [[ $PS1 = *basename* ]]; then 
>         export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\]'
>     else 
>         export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[01;34m\] $(basename ${PWD}) \$ \[\033[00m\]'
>     fi ;}

foo@bar:~/spam/egg$ prompttoggle 

foo@bar egg $ prompttoggle

foo@bar ~/spam/egg $

5

বা ... দুটি খুব ছোট ফাংশন তৈরি করুন এবং আপনার শেষে যুক্ত করুন~/.bashrc

# short prompt
promptshort() { export PS1=$(echo "$PS1" | sed 's/\\w/\\W/g') ; }

# full length prompt
promptlong() { export PS1=$(echo "$PS1" | sed 's/\\W/\\w/g') ; }

একটি সংক্ষিপ্ত প্রম্পটের জন্য, টাইপ করুন promptshort, পুরো পথে ফিরে যেতে টাইপ করুনpromptlong

\Wকেবলমাত্র বর্তমানের ডিরেক্টরি দেখায় তাই $(basename ${PWD})ওভারকিল ইমো

আপনি একটি ফাংশনে একত্রিত করতে পারেন তবে "দীর্ঘ" এবং "সংক্ষিপ্ত" বর্ণনামূলক এবং উভয়ের "টগল" এর চেয়ে কম কীস্ট্রোক রয়েছে;)

পিএস 1 কে ওভাররাইড করার জন্য একটি লাইন যুক্ত করার পরিবর্তে আমি কোডটি সেট করে যা এটি সেট করাকে টুইঙ্ক করতে পছন্দ করে (উদাহরণস্বরূপ, অসুবিধা force_color_prompt=yesএবং পরে লাইনটি সম্পাদনা [ "$color_prompt" = yes ]; then)


3

এখানে একটি ~/.bashrcফাংশন সংজ্ঞা রয়েছে যা আমি ব্যক্তিগতভাবে আমার প্রম্পটটিকে নিয়মিত প্রম্পট থেকে ঠিক পুনরায় সেট / টগল করতে ব্যবহার করি $। আপনার প্রয়োজন অনুসারে এটি প্রয়োজনীয় হিসাবে খাপ খায়।

resetps() {
    if [ "$PS1" = "$ " ] 
    then
        PS1=$OLDPS1 
    else
        OLDPS1=$PS1 
        export OLDPS1 
        PS1="$ " 
    fi 
} 

1

এটি আপনার সমস্যার উত্তর (দীর্ঘ ডিরেক্টরি কমান্ড লাইনটি ভেঙে দেয়) এবং আপনার প্রশ্নের নির্দিষ্টভাবে নয় (কীভাবে কমান্ড প্রম্পটটি ফ্লাইয়ে পরিবর্তন করবেন) not

কয়েক বছর আগে এই প্রম্পটটি দিয়ে আমি এই সমস্যাটি সমাধান করেছি:

PS1='\[\e[32;1m\]$? \u@\h \[\e[35;1m\]\w\[\e[m\]\n\$ '
#    └──green───┘         └──purple──┘  └─norm─┘

এটি কী করে:

  1. পূর্ববর্তী কমান্ডের প্রস্থান মূল্য (এটি অবিশ্বাস্যভাবে কার্যকর)
  2. বর্তমান রঙের ব্যবহারকারী এবং হোস্টকে আউটপুট দেয়
  3. অন্য ডিরেক্টরিতে ওয়ার্কিং ডিরেক্টরি আউটপুট করুন (আপনার স্বাদে রঙগুলি সামঞ্জস্য করুন)
  4. ডলার এবং স্থানটিকে একটি নতুন লাইনে আউটপুট দেয় , লাইন বিরতির আগে রঙের ক্রমগুলি শেষ করে

এটি আপনাকে আপনার কমান্ডের জন্য প্রয়োজনীয় সমস্ত স্থান দেয়, আপনি যখন একটি গভীর ডিরেক্টরি কাঠামোয় থাকেন তখন ডানদিকে স্থানান্তরিত করেন না, রঙের কোডগুলি দিয়ে টাইপিং লাইনটি ম্যাঙ্গেল করে না (কখনও কখনও ঘটে যাওয়া অদ্ভুত বাগগুলি এড়ানো), তখনও আপনাকে রঙিন দেয় একটি কমান্ডের আউটপুট কোথায় শেষ হয়েছিল এবং পরেরটিটি শুরু হয়েছিল তার ইঙ্গিত:

এখানে চিত্র বর্ণনা লিখুন

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