বাশ প্রম্পটে কেবল বর্তমান ডিরেক্টরি নাম (পুরো পথ নয়) দেখান


71

আমার ব্যাশ প্রম্পটটি বর্তমানে কনফিগার করা হয়েছে, এটি বর্তমান ডিরেক্টরিতে পুরো পথটি দেখায়। যখন আমি ডিরেক্টরি গাছের অভ্যন্তরে গভীর থাকি তখন এটি বিরক্তিকর হয়, কারণ প্রম্পটটি এত দীর্ঘ হয়ে যায় যে প্রতিটি কমান্ড পরবর্তী পংক্তিতে আবৃত হয়। আমি কীভাবে এটিকে পথের শেষ অংশটি দেখাব?

এটি আমার মধ্যে যা আছে .bashrc:

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

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
    ;;
*)
    ;;
esac

উত্তর:


98

\w(ছোট হাতের অক্ষর) \W(বড় হাতের) এ পরিবর্তন করুন :

PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
                                                                                       ^^
           this one waaaaaay over here ------------------------------------------------+    

কটাক্ষপাত আছে ব্যাশ প্রম্পট হাওটুর মজা বিবরণ প্রচুর জন্য। উদাহরণ:

user@host:/usr/local/bin$ echo $PS1
${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ 

user@host:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '

user@host:bin$

PROMPT_COMMANDপরিবর্তনশীল, যদি সেট করা থাকে, কমান্ড যেগুলি বিজ্ঞপ্তি উল্লেখিত প্রদর্শন করার আগে চালানোর পরার PS1। আপনার ক্ষেত্রে, নির্দিষ্ট এএনএসআই অব্যাহতি সিকোয়েন্স সহ PROMPT_COMMANDএকটি echoবিবৃতি চালায় যা এক্সটারেমের শিরোনামবারটি ম্যানিপুলেট করে

যদি আপনি সন্দেহ করেন যে আপনার প্রম্পটটি PROMPT_COMMANDওভাররাইড করছে তবে আপনি এটি পরীক্ষা PS1করতে unsetপারেন এবং জিনিসগুলি পরীক্ষা করে দেখতে পারেন :

$ unset PROMPT_COMMAND

অবশেষে, নিশ্চিত হয়ে নিন যে আপনি PS1যে সংজ্ঞাটি ব্যবহার করছেন প্রকৃতপক্ষে পরিবর্তন করছেন । প্রচলিত অবস্থান রয়েছে /etc/bash.bashrc, /etc/profile, ~/.bashrc, ~/.bash_profile, ~/.profile। সিস্টেম ফাইলগুলি সাধারণত (তবে সর্বদা নয়) ব্যবহারকারী ফাইলগুলির আগে চালিত হয়।


হুঁ ... আমি ভীত এটি আগে থেকেই \ W এর নই, কিন্তু মনে হচ্ছে যে মত caseবিবৃতি অগ্রাহ্য যখন আমি একটি xterm উপর আছি এবং সমস্যাটি সঙ্গে মনে করা হয় PWDযে PROMPT_COMMANDলাইন। তুমি কি জান যে আমার সেখানে কী রাখা উচিত?
hsribei

4
\w(লোয়ার কেস) এটিকে পুরো পথে নির্ধারণ করে, \W(বড় হাতের অক্ষর) চূড়ান্ত বিছনে ট্রিম করে। PROMPT_COMMAND একটি এক্সমিটারে উইন্ডো শিরোনাম সেট করছে। আপনার TERM পরিবর্তনশীল পরীক্ষা করুন; যদি এটি "xterm" বা "rxvt" দিয়ে শুরু না হয় তবে PROMPT_COMMAND এমনকি রানও হচ্ছে না।
কোয়াকোট কোয়েসোট

ওহ, হ্যাঁ, দুহ দুঃখিত, আমি উপরের এবং ছোট হাতের মিশ্রিত করেছি। কাজ করেছে। ধন্যবাদ! :)
hsribei

দুর্দান্ত উত্তর। এটি কার্যকর হওয়ার জন্য আপনি পুনরায় বুট করেছেন তা নিশ্চিত করুন। ধন্যবাদ!
একত্রিত করুন

14

সিম্পল বাশ রিপ্লেস কমান্ড হ'ল

${VAR/pattern_to_find/pattern_to_replace}

শেষ ডিরেক্টরিটি প্রদর্শনের জন্য আপনি ঠিক করতে পারেন ${PWD/*\//}, অর্থাৎ শেষের আগে এবং কিছু অন্তর্ভুক্ত করে কোনও জিনিস সন্ধান করুন /এবং এটিকে কিছুই দিয়ে প্রতিস্থাপন করুন।

আমার উবুন্টু মেশিনে আমি ব্যবহার করি:

export PS1='$(whoami):${PWD/*\//}#'. 

1
আমি এই উত্তরটি গ্রহণযোগ্য উত্তরটির চেয়ে ভাল পছন্দ করি কারণ এটি কেবলমাত্র PS1 এর বিশেষ পার্সিং যুক্তির পরিবর্তে যে কোনও পরিস্থিতিতে জেনেরিক। কম বেশি শক্তিশালী সরঞ্জাম মনে রাখা এবং রচনা করা সহজ। :)
ডেভিড এলিস

4

আমার সমাধানটি যখন শীর্ষস্থানীয় 3 এবং নীচের 2 ডিরেক্টরিগুলি 5 এরও বেশি থাকে তখন দেখাতে হয়

সুতরাং আমার প্রম্পটটি (যার অন্যান্য তথ্যও রয়েছে) এর মতো দেখাচ্ছে:

08:38:42 durrantm U2017 /home/durrantm/Dropbox/_/rails/everquote

আমার pwd আসলে হয় যখন

/home/durrantm/Dropbox/93_2016/work/code/ruby__rails/rails/everquote

আমার পিএস 1 প্রম্পটটি নীচে সেটআপ করা হয়েছে:

HOST='\[\033[02;36m\]\h'; HOST=' '$HOST
TIME='\[\033[01;31m\]\t \[\033[01;32m\]'
LOCATION=' \[\033[01;34m\]`pwd | sed "s#\(/[^/]\{1,\}/[^/]\{1,\}/[^/]\{1,\}/\).*\(/[^/]\{1,\}/[^/]\{1,\}\)/\{0,1\}#\1_\2#g"`'
BRANCH=' \[\033[00;33m\]$(git_branch)\[\033[00m\]\n\$ '
PS1=$TIME$USER$HOST$LOCATION$BRANCH

git_branch এটি একটি ফাংশন যা বর্তমান গিট শাখা দেখায়, আমি এটি আমার ডটফাইলে রাখি, এটি হ'ল:

git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'
  }

এটা সত্যিই দারুন! এই উত্তরের জন্য অনেক ধন্যবাদ।
কার্লোস এফ

4

এটির জন্য আমার সমাধানটি আমি কীভাবে এটি রফতানি করতে পারি তার ক্ষেত্রে কিছুটা আলাদা so

আরেকটি প্রম্পট স্ট্রিং ভেরিয়েবল তৈরি করুন; PS5 এবং আপনার .profile/ .bash_profileফাইলে নিম্নলিখিত স্ট্রিংটি রফতানি করুন:

। u : বর্তমান ব্যবহারকারীর নামটি প্রদর্শন করুন।

\ ডাব্লু : বর্তমান কার্যনির্বাহী ডিরেক্টরিটির মুদ্রণ করুন।

# Display username and current directory only.
export PS5='export PS1="\u:\W$";';

এখনই যখনই আপনাকে শর্টহ্যান্ড-এড পিএস ব্যবহার করতে হবে, কেবল চালান: eval $PS5


বা আরও ভাল, আপনার .bash_aliasesফাইলে একটি উপনাম তৈরি করুন: ( @ মুরুকে ধন্যবাদ )

alias PS5='export PS1="\u:\W$";';

sourceআবার, এবং এখন আপনি PS5স্যুইচ করতে টাইপ করতে পারেন।


1
এটিকে ফ্রেঙ্কেনালির মতো দেখাচ্ছে looks কেন শুধু একটি নাম বা একটি ফাংশন ব্যবহার করবেন না?
মুরু

1

বাশ প্রম্পটে কেবল বর্তমান ডিরেক্টরি নাম (পুরো পথ নয়) দেখান

অন্যান্য ডায়ালিউডগুলির বেশিরভাগ আমার জন্য আমার সমস্ত ওএসএস জুড়ে কাজ করে না যা আমার ডট ফাইলগুলি ভাগ করে: এআইএক্স, উইন্ডোজ এবং লিনাক্স। ব্যাশ পোর্ট পুরানো সংস্করণ যে নির্দিষ্ট নির্মান সমর্থন দেয়নি ছিল এবং আমি অন্য প্রক্রিয়া (অর্থাত মাল চাইনি sed, awkইত্যাদি) যা cygwin অধীনে লক্ষণীয়ভাবে ব্যয়বহুল।

নিম্নলিখিতটি দীর্ঘ তবে পারফরম্যান্ট:

# takes a number argument of the number of last dirs to show
function DIR_LAST {
    # read -a didn't seem to work under bash 3
    IFS='/' array=($PWD)
    len=${#array[@]}
    start=$((len - $1))
    # leading / if fewer dir args: /usr/flastname not usr/flastname
    if (( $start <= 1 )); then
        start=1
        echo -n /
    fi
    for (( i = $start; $i < $len; i++ )); do
        if (( $i > $start )); then
            echo -n /
        fi
        echo -n ${array[$i]}
    done
}
export PS1="\$(DIR_LAST 2) {$(hostname)} "

আমি এটি থুতু চান:

/
/usr
/usr/foo
foo/bin

শেষ লাইনে একটি শীর্ষস্থানীয় স্ল্যাশের অভাব লক্ষ্য করুন যা আমাকে এটি পছন্দ করে। এছাড়াও, আপনি আর্গটি পরিবর্তন করে শেষ 3 টি ডিরেক্টরি ছড়িয়ে দিতে পারেন DIR_LAST

এছাড়াও, আমি একটি রেজেক্সের সাহায্যে এটি করার চেষ্টা করেছি BASH_REMATCHকিন্তু ব্যাশ ভি 3 পেরেনগুলি পছন্দ করবে বলে মনে হয়নি এবং কীভাবে সঠিকভাবে সেগুলি থেকে পালানো যায় তা আমি বুঝতে পারি না। দীর্ঘশ্বাস.


0

আমি বিশ্বাস করি যে এই বিকল্পটি সহজভাবেই করা সহজ:

echo $PWD | rev | cut -d '/' -f 1 | rev

সুতরাং এটি আপনার .bashrc ফাইলে PS1 ভেরিয়েবলকে নির্ধারণ করুন:

PS1='$(PWD | rev | cut -d '/' -f 1 | rev)'

0
root:~/project#  -> root:~/project(dev)# 

আপনার ~ / .bashrc এর শেষে নিম্নলিখিত কোডটি যুক্ত করুন

force_color_prompt=yes
color_prompt=yes
parse_git_branch() {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/'
}
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;31m\]$(parse_git_branch)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(parse_git_branch)\$ '
fi
unset color_prompt force_color_prompt
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.