আমি কীভাবে চলমান শেলের একটি পরিবর্তনশীল সম্পাদনা করতে পারি?


8

আমি আমার পিএস 1 প্রম্পটটি সম্পাদনা করছি এবং আমি আমার বাশার্ক এটি আপডেট করার জন্য সোসারিং রাখতে চাই না (যেহেতু আমার বাশার্ক অন্যান্য জিনিসও পুনরায় সেট করে)। আমি এটি অনুলিপি করে বার বার কপি করতেও চাই না। nano(আমার ডিফল্ট সম্পাদক) ব্যবহারের মতো ইন্টারেক্টিভভাবে পরিবর্তনশীল সম্পাদনা করার কোনও উপায় আছে কি ?

পিএস 1 বেশিরভাগ উদাহরণ, কারণ আমি অন্যান্য ভার্সের সাথে একই জিনিসটি করতে চাই। আমি এটি ইন্টারেক্টিভভাবে করতে চাইছি কারণটি হল ভেরিয়েবলটি ইতিমধ্যে বেশ দীর্ঘ, এবং আমার এটিতে কয়েকটি অক্ষর সম্পাদনা করতে হবে। এবং আমার এটি কেবল বর্তমান শেলটিতে পরিবর্তন করা দরকার।

উত্তর:


8

এটি করা যেতে পারে। টাইপ করুন var=$varএবং তারপরে এটি প্রসারিত এবং সম্পাদনা করুন। প্রসারণ করতে, Esc+ Ctrle(ডিফল্ট শর্টকাট, bind -p | grep shell-expand-lineনিশ্চিত করতে আউটপুট পরীক্ষা করুন) ব্যবহার করুন।

তাই:

muru@muru-1604:~$ PS1=$PS1

হয়ে যাবে:

muru@muru-1604:~$ PS1=${debian_chroot:+($debian_chroot)}\u@\h:\w\$

যা আপনি তখন সম্পাদকীয়তে Ctrlx Ctrle( edit-and-execute-commandপঠনের শর্তে) সম্পাদনা করতে পারেন । আপনি যখন সংরক্ষণ এবং প্রস্থান করবেন, তখন সংরক্ষিত সামগ্রী শেল দ্বারা কার্যকর করা হবে।

আপনার ইতিমধ্যে PS1=...আপনার ইতিহাসে থাকলে, আপনি কেবল সেইটিতে ফিরে যেতে পারেন Ctrlx Ctrle

থেকে ব্যাশ ম্যানুয়াল :

shell-expand-line (M-C-e)

শেলের মতো লাইনটি প্রসারিত করুন। এটি শেল শব্দের সম্প্রসারণের সাথে সাথে সমস্ত নাম এবং ইতিহাসের প্রসার সম্পাদন করে।

edit-and-execute-command (C-xC-e)

বর্তমান কমান্ড লাইনে একটি সম্পাদককে ডাকুন এবং ফলাফলটি শেল কমান্ড হিসাবে কার্যকর করুন। বাশ সেই আদেশে সম্পাদক হিসাবে IS ভিজ্যুয়াল, $ সম্পাদক এবং ইমাসকে আহ্বান করার চেষ্টা করে।


নিস! Just Esc, Ctrl + E হ'ল আমি যা খুঁজছিলাম। যদিও আমি টাইপ করার সময় PS1='$PS1'এটি উদ্ধৃতি মুছে ফেলা হয়েছে, তবে টাইপিং PS1=\'$PS1\'পুরোপুরি কার্যকর হয়।
wjandrea

এবং পড়তে গিয়ে bind -pআমি জানতে পেরেছিলাম যে আপনি গ্লোব, টিল্ডস এবং ইতিহাসের রেখাগুলি প্রসারিত করতে পারেন। ঝরঝরে!
wjandrea

1

বাশার্ক স্যুরসিংয়ের পরিবর্তে, অন্য একটি ফাইল উত্স করুন, যা কেবলমাত্র ভেরিয়েবলটি ধারণ করে।

  1. এটি তৈরি করুন:

    echo "PS1='$PS1'" > /tmp/PS1
    • দ্রষ্টব্য: যদি ভেরিয়েবলের একক উদ্ধৃতি থাকে তবে আপনাকে একটি কমান্ড ব্যবহার করতে হবে যা এগুলি থেকে পালাতে পারে, যেমন:

      declare -p PS1 | cut -d' ' -f3- > /tmp/PS1
  2. এটি একটি সম্পাদক এ খুলুন, যেমন nano /tmp/PS1

    • nanoবেশি দৌড়াতে এড়াতে , আপনি এটিকে অন্য টার্মিনাল / টিটিওয়াইতে চালাতে পারেন বা গ্রাফিকাল সম্পাদক ব্যবহার করতে পারেন।
  3. আপনার পরিবর্তনগুলি করুন এবং সংরক্ষণ করুন।

  4. এটি উত্স:

    source /tmp/PS1
  5. প্রয়োজনীয় পদক্ষেপ 3 এবং 4 পুনরাবৃত্তি করুন।


1

Zsh এর একটি বিল্টিন রয়েছে varedযা আপনাকে ভেরিয়েবল ইনলাইন সম্পাদনা করতে দেয়। আমি আমার নিজস্ব সংস্করণটি লিখেছিলাম, মূলত সুপার ব্যবহারকারীর উপর পোস্ট করেছি :

vared(){
    # Based on the zsh builtin of the same name.
    IFS= read -rei "${!1}" "$1"
}

দ্রষ্টব্য এটি Zsh বিল্টিন থেকে কিছু সূক্ষ্ম পার্থক্য আছে, উদাহরণস্বরূপ:

  • ভেরিয়েবলটি সেট না করা থাকলে ত্রুটি হবে না
  • ভেরিয়েবলের মানটি মুদ্রণের আগে বৈধতা পরীক্ষা করে (যেমন vared $)
  • বহু-লাইন ভেরিয়েবলগুলি কেটে দেয়।

তারপরে PS1 সম্পাদনা করতে, কেবল চালান vared PS1


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