PS1 = '$ (pwd)' কেন এটি কাজ করে এবং কেন এটি PS1 = $ (pwd) থেকে আলাদা


18

আমি যখন এই কমান্ডটি প্রবেশ করি তখন আমার ডিরেক্টরিতে প্রম্পটটি পরিবর্তন হয়?

PS1='$(pwd)'

আমি একক উদ্ধৃতি ব্যবহার করছি, যার অর্থ কোনও বিরক্তি নয়, ওরফে echo '$(pwd)'→ → →$(pwd)

তদ্ব্যতীত, বলুন যে আমরা স্পষ্ট করেছিলাম কেন এটি কাজ করে ... কেন এটি আলাদা থেকে কাজ করছে PS1=$(pwd)? (কোনও মূল্য নেই)

ভিন্নভাবে আমি বলতে চাইছি যদি আমি উদ্ধৃতি ব্যবহার করি তবে টার্মিনালটি নেভিগেট করার সাথে সাথে প্রম্পটটি আমার বর্তমান ডিরেক্টরিতে পরিবর্তিত হবে। তবে যদি আমি উদ্ধৃতি ব্যবহার না করি, তবে কমান্ডটি প্রথম প্রবেশ করার সময় প্রম্পটটি সর্বদা ডিরেক্টরিতে থাকবেPS1=$(pwd)

কেন?


2
কিছু সিপিইউ চক্র সংরক্ষণ করুন এবং পিএস 1 = '$ পিডাব্লুডি' সমতুল্য ব্যবহার করুন
jlliagre

উত্তর:


29

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

A=$(pwd)
echo "$A"
B='$(pwd)'
echo "$B"

Aঅবিলম্বে মানটির স্ট্রিং হয়ে যায় /home/yourusernameএবং স্পষ্টতই এটি মনে হয় না যে এই স্ট্রিংটি কোথা থেকে এসেছে, আপনি ডিরেক্টরি পরিবর্তন করলেও এটি একই থাকে। মানটির অর্থ ব্যাখ্যা না করেই Bআক্ষরিক স্ট্রিংয়ে পরিণত হয় $(pwd)

এখন, PS1বিশেষ কিছুর মান হিসাবে : প্রম্পটটি যখনই মুদ্রিত হয় তখনই কিছু বিশেষ কন্সট্রাক্টসকে ব্যাখ্যা করা হয়, যেমন কমান্ড প্রতিস্থাপনটি ভেরিয়েবলের $(...)অ্যাসাইনমেন্টে ঠিক ঠিক একইভাবে সম্পাদিত Aহয়। স্পষ্টতই যদি আপনার PS1নিজের হোম ডিরেক্টরিটির আক্ষরিক স্ট্রিং থাকে (উপরের মতো A) তবে এটি পরিবর্তনের কোনও উপায় নেই। তবে যদি এতে স্ট্রিং থাকে $(pwd)(উপরের মতো B) তবে প্রম্পটটি মুদ্রিত হলেই এটি মূল্যায়ন করা হয় এবং তাই আপনার প্রকৃত ডিরেক্টরি প্রদর্শিত হয়।


14

বাশ এবং zsh উভয় ক্ষেত্রে, এর PS1প্রম্পট হিসাবে মানটি ব্যবহৃত হয় না, এটি কিছুটা বিস্তৃত হয়। নিয়ম দুই শেল জন্য পৃথক, কিন্তু উভয় ক্ষেত্রেই, ধাপ এক স্বাভাবিক শেল সিনট্যাক্স একই বাক্য গঠন সঙ্গে "ডলার" প্রসারণও (পরিবর্তনশীল প্রতিকল্পন, কমান্ড পরিবর্তকগুলি গাণিতিক মূল্যায়ন) সম্পাদন করতে হবে ( , , বা , , ) ।$VARIABLE${VARIABLE}$(COMMAND)`COMMAND`$((EXPRESSION))$[EXPRESSION]

  • ব্যাশে, ডলারের প্রসারণটি ডিফল্টরূপে চালু হয় তবে এটি দিয়ে বন্ধ করা যায় shopt -u promptvars
  • জেডএস-এ, ডলারের প্রসারণ ডিফল্ট হিসাবে বন্ধ থাকে তবে অনেক লোক (এবং বেশিরভাগ কনফিগারেশন ফ্রেমওয়ার্ক আপনি ওয়েবে পাবেন) এটি চালু করে setopt prompt_subst

প্রম্পটে ডলারের প্রসারণটি চালু হওয়ার সাথে সাথে, 6-বর্ণের মানকে PS1='$(pwd)'সেট PS1করে $(pwd)এবং এর ফলে $(pwd)প্রতিস্থাপন করা যায়, এবং তাই pwdকমান্ডটি কার্যকর করা হয়, প্রতিবার শেল একটি নতুন প্রম্পট প্রদর্শন করে। অন্যদিকে, সেই সময় শেলের বর্তমান ওয়ার্কিং ডিরেক্টরি যা আছে PS1=$(pwd)সেট PS1করে। যদি আপনার ডলারের প্রসার বন্ধ হয়ে থাকে তবে PS1='$(pwd)'প্রম্পটটিকে আক্ষরিক স্ট্রিং হিসাবে দেখা দেয় $(pwd)

নোট করুন যে প্রম্পটে ওয়ার্কিং ডিরেক্টরি পাওয়ার আরও সুবিধাজনক উপায় রয়েছে:

  • ব্যাশে, ব্যাকস্ল্যাশ এড়ানো যেমন \wআপনার হোম ডিরেক্টরিটি সংক্ষিপ্ত করে ~এবং সেটিংস দ্বারা ছাঁটা যায় PROMPT_DIRTRIM
  • জেডএস-এ, শতাংশ বাঁচার সাথে যেমন ( %/বা%~%/ একই হিসাবে $PWD, %~হোম ডিরেক্টরি সংক্ষিপ্ত করে), যা ট্রিমিং সেটিংস থাকতে পারে।
  • উভয় শেলের মধ্যে (এবং অন্য কোনও বোর্ন-স্টাইলের শেল) $PWDসমান $(pwd): বর্তমান ওয়ার্কিং ডিরেক্টরি পেতে আপনাকে সাবপ্রসেস চালানোর দরকার নেই।

7

কারণ উদ্ধৃতিগুলি ছাড়াই, পিএস 1 সেট হওয়ার পরে $ (পিডব্লিউডি) মূল্যায়ন করা হয়। উদ্ধৃতিগুলির সাথে, প্রম্পট প্রদর্শিত না হওয়া অবধি $ (pwd) এর মূল্যায়ন স্থগিত করা হবে।

উদ্ধৃতিগুলি ব্যতীত, PS1 সেট করার সময় PS1 বর্তমান ডিরেক্টরিতে সেট করা আছে। একক উদ্ধৃতি সহ পিএস 1 $ (pwd) তে সেট করা হয়েছে যার অর্থ এটি প্রতিটি সময় প্রম্পট প্রদর্শিত হলে বর্তমান ডিরেক্টরিটি মূল্যায়ন এবং মুদ্রণ করবে।

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