আমার ফাংশন পিএস 1 এ পুনরায় মূল্যায়ন করা হয় না কেন?


15

আমি আমার প্রম্পটের একটি অংশ একটি ফাংশন দ্বারা গতিশীল সেট করার চেষ্টা করছি, তাই আমার মধ্যে .bashrcরয়েছে:

asdf ()
{
    echo -n $(pwd)
}
PS1="\u@\h:\w $(asdf)\$ "

শেল খুললে আমার প্রথমে যা প্রত্যাশা থাকে তা দেয়:

$ bash
darthbith@server:~/test /home/darthbith/test$

তবে আমি যখন ডিরেক্টরি পরিবর্তন করি তখন ফাংশন দ্বারা সংজ্ঞায়িত অংশটি পরিবর্তন হয় না:

darthbith@server:~/test /home/darthbith/test$ cd ~/test2
darthbith@server:~/test2 /home/darthbith/test$

আমার আসল লক্ষ্য হ'ল git-prompt.shস্ক্রিপ্টটি আমার গিট সংগ্রহস্থলের শাখাটি দেখানোর জন্য যখন আমি সুন্দর রঙ এবং সমস্ত কিছু দিয়ে থাকি, তবে সমস্যাটি হ'ল আমি যখন সংগ্রহস্থলগুলি পরিবর্তন করি তখন এটি কখনই শাখার নাম আপডেট করে না। উপরের তুচ্ছ উদাহরণটি আমার প্রজননের সবচেয়ে সহজ প্রজনন যা আমি আমার প্রশ্নের জন্য নিয়ে আসতে পারি।

.bashrcলাইন যে আমি Git প্রম্পট স্ক্রিপ্ট সংহত করতে হবে:

source ~/.git-prompt.sh
PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]$(__git_ps1)\$ "

সাইড নোটে, আপনি যদি গিট প্রম্পট চান তবে আমি github.com/magicmonty/bash-git-prompt/blob/master/README.md
মিগাজর

উত্তর:


22

বাশ প্রম্পট অনুসারে হাওটো :

[21:58:33][giles@nikola:~]$ PS1="[\$(date +%H%M)][\u@\h:\w]\$ "
[2159][giles@nikola:~]$ ls
bin   mail
[2200][giles@nikola:~]$

কমান্ড প্রতিস্থাপনের ডলার স্বাক্ষরের আগে ব্যাকস্ল্যাশটি লক্ষ্য করা গুরুত্বপূর্ণ। এটি ব্যতীত বাহ্যিক কমান্ডটি একবারে কার্যকর করা হয়: যখন PS1 স্ট্রিংটি পরিবেশে পড়ে।


ধন্যবাদ! এখন যদি কেবল ফাংশন থেকে ফিরে পলায়নের সিকোয়েন্সগুলির পরিবর্তে রঙগুলি মুদ্রণ করতে পারি তবে ...
ডার্থবিথ

6

আপনি যখন $(..)ডাবল-কোট ব্যবহার করেন, শেলটি নির্ধারিত হওয়ার আগে কমান্ড প্রতিস্থাপনের মূল্যায়ন করে PS1। সুতরাং, PS1কেবল আউটপুট ধারণ করে, কমান্ড প্রতিস্থাপন নিজেই নয়। পরিবর্তে, হয় একক উদ্ধৃতি ব্যবহার করুন, বা এড়িয়ে চলুন $, যাতে স্ট্রিংটি যেমন হয় তেমন পাস হয় PS1এবং তারপরে প্রম্পট সেট হওয়ার পরে মূল্যায়ন করা হয়:

$ PS1='$(pwd) $ '
/tmp $ cd /var
/var $ echo "$PS1"
$(pwd) $ 

তুলনা করা:

/var $ PS1="$(pwd) $ "
/var $ echo "$PS1"
a /var $  a
/var $ 
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.