ব্যাশ কমান্ড লাইন বাফারে পাঠ্য রাখুন


9

আমি প্রোগ্রামিয়ালি বাশনের কমান্ড লাইন বাফারে একটি নির্দিষ্ট পাঠ্য রাখতে চাই, সম্পাদনা করতে এবং কমান্ড হিসাবে ব্যবহার করতে পঠন।

আমি যা দেখছি তা হ'ল read -iকমান্ডের অনুরূপ ।

-i text লাইনটি পড়ার জন্য যদি রিডলাইন ব্যবহার করা হয়, সম্পাদনা শুরুর আগে পাঠ্য সম্পাদনা বাফারে স্থাপন করা হয়।

সম্পাদনা : প্রোগ্রামগতভাবে আমার অর্থ হ'ল এটি কোনও স্ক্রিপ্টে লিখতে চাই , স্ক্রিপ্টটি চালু করুন এবং কমান্ড বাফারটি প্রস্তুত করুন বা কমান্ডের ইতিহাসটি সংশোধিত করুন (কিছু প্রশ্নের পরামর্শ অনুসারে)।


আইআইআরসি screenআপনার জন্য এটি করতে পারে।
strugee

উত্তর:


6

আমি fzf উদাহরণ পৃষ্ঠায় এটি করার একটি হ্যাকি উপায় পেয়েছি । এটি ব্যাশ 4.3 এবং পার্ল 5.18 এর সাথে কাজ করে:

writecmd () { 
  perl -e 'ioctl STDOUT, 0x5412, $_ for split //, do{ chomp($_ = <>); $_ }' ; 
}

# Example usage
echo 'my test cmd' | writecmd

এটি স্ট্যান্ডআউট করার জন্য কমান্ডটি মুদ্রণ করে, তবে এটি কমান্ড বাফারেও অনুলিপি করে। লিঙ্কযুক্ত পৃষ্ঠায় একটি উদাহরণ রয়েছে যদি আপনি সরাসরি কমান্ডটি কার্যকর করতে চান।


এই উত্তরটি ওপি কর্তৃক যা চেয়েছিল তার নিকটতম।
রেজা.সফিয়াত

এই উত্তরে কিছুটা আলাদা সিনট্যাক্স , এর &TIOCSTIচেয়ে কিছুটা সুন্দর 0x5412। এটি লক্ষণীয় যে এটিকে কিছু প্ল্যাটফর্মের (যেমন ওপেনবিএসডি ) টিআইওসিএসটিআই অক্ষম করার মতো মনে হচ্ছে। আমি মনে করি এর অর্থ এই পদ্ধতির এবং zsh এর উভয়ই কার্যকর print -zহবে না।
dimo414

4

যদি আপনি এমন কোনও ফাংশনের জন্য যা আপনি একটি রিডলাইন বাঁধাইয়ের সাথে ব্যবহার করতে যাচ্ছেন bind -xতবে আপনি সংশোধন করতে পারেন READLINE_LINE। ( উদাহরণ )

রিডলাইন বাইন্ডিংয়ের বাইরে, আপনি ইতিহাসের সাথে একটি জাল কমান্ড ঠেলাতে পারেন history -s


সমস্যাটি হ'ল আমি history -s 'foo'যদি কোনও স্ক্রিপ্টে করি তবে আরম্ভ করা শেলের ইতিহাসটি মোটেও পরিবর্তিত হবে না
gioele

@gioele আপনাকে এটিকে শেলের মধ্যে থেকে উদ্বোধন করতে হবে (যেমন কোনও স্ক্রিপ্ট যা আপনি লোড করেছেন source) থেকে। আপনি আলাদা প্রক্রিয়া থেকে কিছু করতে পারবেন না।
গিলস 'অশুভ হওয়া বন্ধ করুন'

2

গিলসের উত্তর সঠিক, তবে সম্পূর্ণ সন্তুষ্ট নয়। এই প্রশ্নটি পড়ার সাথে সাথে ওপি পরবর্তী ইনপুট লাইনটি "প্রিসিড" করতে চায়। আমার ক্ষেত্রে আমি আমার PROMPT_COMMAND ফাংশনে টার্মিনালের বর্তমান অবস্থানটি পড়তে চেয়েছিলাম। এটি কাজ করে তবে প্রাথমিক শেলটির মতো একই পঠিত বাফার ব্যবহার করে এবং তাই কোনও ফাংশনে একটি 'রিড' বিল্টিন কলটি করে যে কোনও ব্যবহারকারীর ইনপুটটি বাতিল হয়ে যায়। সুতরাং আমি পৃথকভাবে ইউজার ইনপুট পড়তে চেয়েছিলাম, আমার টার্মিনালটি পড়তে চাইছি এবং তারপরে পঠন ইনপুটটিকে ইনপুট বাফারে ফিরিয়ে রাখতে চাই যা মূল প্রশ্ন। নোট করুন যে এটি প্রকৃতপক্ষে একই প্রক্রিয়ার মধ্যে রয়েছে, সুতরাং তাত্ত্বিকভাবে এটি সম্ভব হওয়া উচিত।

আমি যতদূর দেখতে পাচ্ছি (আমার বাশ ৪.২ এ) প্রোগ্রামগতভাবে ইনপুট স্ট্যাকটিতে কিছু ঠেলার জন্য কোনও ফাংশন নেই। Zsh এ 'মুদ্রণ -z' ব্যবহার করছে।

সুতরাং উত্তরটি হ'ল: এটি ব্যাশে সম্ভব নয়, এর জন্য আপনার zsh ব্যবহার করা দরকার।


0

history -s 'foo'চেষ্টা করার বিকল্প হিসাবে :

echo 'foo' >> ~/.bash_history
history -n

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