শেল প্রম্পটে সংক্ষেপিত বর্তমান ডিরেক্টরি?


23

vim সত্যিই খুব সুন্দর বৈশিষ্ট্য রয়েছে যা এটি কিছুটা দীর্ঘ হলে তার পথগুলিতে ব্যবহার করে:

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

এটি শীর্ষে ট্যাবে নথির পাথটিকে সংক্ষিপ্ত করে। এর সাথে কিছু করার মতো কোনও উপায় আছে যাতে আমার ব্যাশ প্রম্পটটি দেখতে এই রকম হয় না:

rfkrocktk@work-laptop ~/Documents/Projects/Work/maventest/src/main/java/com/tkassembled/ $ 

2
সুতরাং, আপনি কি চান rfkrocktk@work-laptop ~/D/P/W/m/src/main/java/com/tkassembled/ $ ? আদর্শভাবে, সর্বাধিক প্রম্পট দৈর্ঘ্যের জন্য কিছু থ্রেশহোল্ড ব্যবহার করছেন?
নিকেরোবট

হুবহু, আমি যা খুঁজছি
নাফতুলি কে

ঠিক আছে, আমি আমার উত্তর সরবরাহ করেছি।
নিকোরোবট

উত্তর:


14

ব্যবহার করে দেখুন এই :

PROMPT_COMMAND='PS1X=$(perl -pl0 -e "s|^${HOME}|~|;s|([^/])[^/]*/|$""1/|g" <<<${PWD})'

বা, খাঁটি বাশ:

PROMPT_COMMAND='PS1X=$(p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf "${q:1}")'

তারপর

PS1='\u@\h ${PS1X} $ '

(লক্ষ্য উত্পাদন ~জন্য ${HOME}):

rfkrocktk@work-laptop ~/D/P/W/m/s/m/j/c/tkassembled $

আমি আমার উত্তরটি উন্নত করেছি @ এনজোটিবের জন্য ধন্যবাদ


1
উত্তরোত্তর জন্য প্রম্পট হিসাবে এটি দেখতে কেমন হবে তার একটি উদাহরণ আপনি সরবরাহ করতে পারেন?
নাফটুলি কে

(0) আপনার গিথুব লিঙ্কটি ভেঙে গেছে। (1) আপনি একটি ঘনিষ্ঠ কটাক্ষপাত করতে চাইতে পারেন $PWD~পরীক্ষা। বর্তমানে, যদি HOMEহয় /home/edএবং PWDহয় তবে /home/edwinaআপনি ~winaপার্ল সংস্করণ এবং ~/inaশেল সংস্করণে পাবেন। (২) আপনার ডিরেক্টরিতে শেল কোডটি স্তূপিত হয়েছে যদি বর্তমান ডিরেক্টরিটিতে কোনও ওয়াইল্ডকার্ড (অর্থাত্ প্যাথনাম এক্সপেনশন) অক্ষর থাকে; যেমন, PWD= /abc/*/def। আপনি এটি যুক্ত করে set -o noglobবা এটি ঠিক করতে পারেন set -f। … (চালিয়ে যাওয়া)
জি-ম্যান

(চালিয়ে যাওয়া) ... (3) আপনার এত বেশি ধনুর্বন্ধনী প্রয়োজন নেই। পার্ল কমান্ডে $HOME(যা ডাবল কোটসের অভ্যন্তরে রয়েছে) এবং $PWDযথেষ্ট ভাল। শেল কমান্ডে, গত তিন শেল পরিবর্তনশীল রেফারেন্স জরিমানা, কিন্তু প্রথম তিন হতে পারে "${PWD#$HOME}", "$PWD"এবং "$p"। (4) এছাড়াও মেন্টলির উত্তর এবং তার উপর আমার মন্তব্যগুলি দেখুন।
জি-ম্যান

15

@Nicerobot উত্তরের মত, তবে কিছুটা ছোট

PROMPT_COMMAND='pwd2=$(sed "s:\([^/]\)[^/]*/:\1/:g" <<<$PWD)'
PS1='\u@\h:$pwd2\$ '

এটি ফলোইন উদাহরণ আউটপুট প্রদর্শন করবে:

enzotib@acer:/h/enzotib$ cd
enzotib@acer:/h/enzotib$ cd /usr/share/doc/acpid/examples/
enzotib@acer:/u/s/d/a/examples$

13

আমি PROMPT_DIRTRIMব্যাশে পছন্দ করি ...

export PROMPT_DIRTRIM=2

আপনার উদাহরণ প্রম্পট পরিবর্তন করতে হবে ...

rfkrocktk@work-laptop ../com/tkassembled/ $

এটা আমার জন্য কাজ করে.


তিনি যা বলেছিলেন তা করেন না তবে বৈশিষ্ট্য সম্পর্কে আমাকে জানানোর জন্য ধন্যবাদ।
নিকোরোবট

3
@ কিনারবোট হ্যাঁ, আপনার আসল উত্তর ছিল। :) আমি জানি যে এটি যে সংক্ষেপের জন্য জিজ্ঞাসা করেছিল তা দেয় না, তবে প্রায়ই যখন আমরা সহজ বিকল্প দেখি তখন আমাদের প্রত্যাশা পরিবর্তন হয় change এছাড়াও, এটি আদর্শ, এবং যেমনটি আমি অনুভব করেছি এটি একটি উল্লেখ প্রাপ্য।
বেন্টএফএক্স

1
আমি অনুভব করি যে এসই এর অন্যতম কাজ হ'ল কেবল প্রশ্নের সঠিক উত্তর প্রদান করা নয়, বরং ওপি এবং অনুসন্ধানের মাধ্যমে প্রশ্নটি খুঁজে পাওয়া অন্যান্যদের জন্য অন্যান্য বিকল্প সরবরাহ করা। "আমি চাই ... আমার জন্য কাজ করে" আমি সরবরাহ করেছিলাম এমন উত্তর প্রসঙ্গে লক্ষ্য করুন। এখনও কেউ কেউ মনে করেন যে এটি একটি নিচে ভোটের দাবিদার।
বেন্টএফএক্স

আমি উত্তরগুলি নিচে নামতে দেখছি যা সরাসরি প্রশ্নের উত্তর দেয় না তবে আমি আপনাকে সম্মত করি যে বিকল্প সরবরাহ করা একটি বৈধ প্রতিক্রিয়া বা উত্তর হতে পারে ।
নিকেরোবট

বেন্টএফএক্স এর উত্তর পুরোপুরি ওপি-র প্রশ্নের উত্তর দেয় না তবে শেল প্রম্পটে হ'ল অ্যাব্রেভিয়েটেড বর্তমান ডিরেক্টরি? যা সম্ভবত এই বিষয়টির বেশিরভাগ দর্শকের জন্য ঠিক তারা কী খুঁজছেন।
টিএনটি

4

এনজোটিবের উত্তরে যোগ করা , নিম্নলিখিত স্নিপেটটি হবে:

  1. রূপান্তর /Path/To/Your/Home/করুন ~/(সুতরাং এর ~/a/b/cপরিবর্তে কোনও পথ হবে /P/T/Y/H/a/b/c)
  2. 'বিন্দু ফাইল' এর প্রথম অক্ষরটি কেবল বিন্দু প্রদর্শন করার পরিবর্তে ( /a/./c/dহয়ে যাবে /a/.b/c/d) ব্যবহার করুন:

    PROMPT_COMMAND='PS1_PATH=$(sed "s:\([^/\.]\)[^/]*/:\1/:g" <<< ${PWD/#$HOME/\~})'
    export PS1='\u@\h:$PS1_PATH\$ '

নিশ্চিত করুন যে আপনি একক উদ্ধৃতি বা ব্যাশ ব্যবহার করেছেন তা অকাল সময়ের সাথে এটি প্রসারিত করবে।


3

আপনার ব্যবহারের জন্য বিন্যাস PS1হল \W(দেখুন PROMPTINGঅধ্যায় bashman পৃষ্ঠা)।

PS1="\u@\h \W\$ "

এবং আপনি সেখানে অন্যান্য বিকল্পগুলি পড়তে চাইতে পারেন, আপনি আপনার কমান্ড লাইন দিয়ে কিছু দুর্দান্ত জিনিস করতে পারেন।


2
আমার মনে হয় \ ডাব্লু তার যা বলছে তা কিছুই করে না।
নিকেরোবট

1
@nicerobot এটি পথের প্রতিটি উপাদানগুলির প্রথম সূচনা দেয় না, তবে এটি বর্তমানের ডিরেক্টরিটি আরও ছোট আকারে দেয়। আমি নিশ্চিত যে প্রতিটি প্রম্পট সম্পাদন করা কিছু কুরুচিপূর্ণ স্ক্রিপ্ট ব্যবহার না করে সেই পদ্ধতিতে ডিরেক্টরিটি সংক্ষেপণ করা সম্ভব নয় pretty এ সম্পর্কে তাঁর কী বক্তব্য রয়েছে তা আমরা দেখতে পাব।
কেভিন

1

আমি নিকেরোবটের উদাহরণ থেকে আউটপুটটি পছন্দ করি তবে আমি একটি সমস্যা পেয়েছি। আমি একটি ডিরেক্টরি এটি একটি হাইফেন আছে, have A-E, এবং এটি দেখছিলাম -Eএকটি আর্গুমেন্ট হিসাবে printfযখন এটি আমার সাম্প্রতিক কাজ করা ছিল। এটির সমাধানের জন্য, আমি আউটপুটটির আশেপাশে --সর্বশেষে printfযোগ করেছি এবং আউটপুটের কিছু নেই বলে আউটপুটটির চারপাশে উদ্ধৃতি যুক্ত করেছি:

p="${PWD#${HOME}}"; [ "${PWD}" != "${p}" ] && printf "~";IFS=/; for q in ${p:1}; do printf /${q:0:1}; done; printf -- "${q:1}"

(1) -দ্বিতীয় অক্ষর হিসাবে থাকা ডিরেক্টরি নামের ইস্যুতে ভাল ধারণা । যদিও এটি সত্য যে --আর্গুমেন্টগুলি দিয়ে শুরু করার সাধারণ সমাধান, এটির -জন্য আরও ভাল পদ্ধতিটি printfবলা ভাল কারণ এটি printf "%s" "${q:1}"যুক্তিযুক্ত যুক্তিগুলির বিরুদ্ধেও সুরক্ষা দেয় %। (উদাহরণস্বরূপ, চেষ্টা করুন PWD= /home/mbentley/Documents/Projects/Work/maventest/src/main/java/com/abc%def। (২) নিকোড়বোটের উত্তর সম্পর্কে আমার মন্তব্যগুলিও দেখুন
জি-ম্যান বলেছেন 'রিইনস্টেট মনিকা'
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.