ধরুন আমি আগে চালিত চারটি কমান্ডের একটি ক্রম সম্পাদন করতে চাই। কমান্ড-ইতিহাসে যদি প্রথমটি 432 হয় তবে আমি এটি করতে পারি:
$ !432; !433; !434; !435
আমি কৌতূহলী, এটি সম্পাদন করার আরও কার্যকর উপায় আছে কি?
ধরুন আমি আগে চালিত চারটি কমান্ডের একটি ক্রম সম্পাদন করতে চাই। কমান্ড-ইতিহাসে যদি প্রথমটি 432 হয় তবে আমি এটি করতে পারি:
$ !432; !433; !434; !435
আমি কৌতূহলী, এটি সম্পাদন করার আরও কার্যকর উপায় আছে কি?
উত্তর:
যদি এটি সাম্প্রতিক সময়ে পরিচালিত আদেশগুলি বোঝায়, আরও কার্যকর উপায় হ'ল negativeণাত্মক সংখ্যার সাথে তাদের উল্লেখ করা:
!-4; !-3; !-2; !-1
এছাড়াও, একবার এটি করা হয়ে গেলে, আপনার শেষ ইতিহাসের এন্ট্রিতে সম্পূর্ণ কমান্ডের শৃঙ্খলা থাকবে, যাতে আপনি এটি দিয়ে পুনরাবৃত্তি করতে পারেন !!
।
সম্পাদনা:
আপনি ইতিমধ্যেই না থাকে, তাহলে মহান builtin ফাংশন এর সাথে পরিচিত fc
, গিলেজ উল্লেখ । (ব্যবহার করুন help fc
।) দেখা যাচ্ছে যে আপনি এটির সাথে নেতিবাচক সংখ্যাগুলিও ব্যবহার করতে পারেন, তাই আপনি উপরে ব্যবহার করে একই ব্যবহার করতে পারেন
eval "`fc -ln -4 -1`"
এটির একটি সতর্কতা রয়েছে, যদিও: এর পরে, eval
লাইনটি ইতিহাসে শেষ কমান্ড হিসাবে সংরক্ষণ করা হয়। সুতরাং আপনি যদি এটি আবার চালনা করেন তবে আপনি লুপে পড়ে যাবেন!
এটির একটি নিরাপদ উপায় হ'ল ডিফল্ট fc
অপারেশন মোডটি ব্যবহার করা : নির্বাচিত কমান্ডের সীমাটি কোনও সম্পাদকের কাছে ফরোয়ার্ড করা এবং এখান থেকে প্রস্থান করার পরে সেগুলি চালানো। চেষ্টা করুন:
fc -4 -1
এমনকি কমান্ডের ব্যাপ্তির ক্রমটি বিপরীত করতে পারেন: fc -1 -4
ইতিহাসে কমান্ডের একটি সীমা দেখতে অন্তর্নির্মিত fc
কমান্ডটি ব্যবহার করুন :
fc -ln 432 435
এগুলি আবার কার্যকর করতে:
eval "$(fc -ln 432 435)"
man fc
আমাকে কিছু দেয় না। কি fc
দাঁড়াবে? অন্যান্য অপশন আছে কি?
help fc
... এবং এছাড়াও help help
.... সহায়তা: সহায়তা [-dms] [প্যাটার্ন ...] বিল্টিন কমান্ড সম্পর্কে তথ্য প্রদর্শন করুন।
-l
পতাকা ছাড়াই , এটি অশুভের প্রয়োজন ছাড়াই কার্যকর করা হবে eval
।
fc
কমান্ড" বা "ফিক্স কমান্ড" বোঝায়।
বাশ ইতিহাস থেকে ক্রমানুসারে বেশ কয়েকটি কমান্ড চালানোর জন্য একটি দুর্দান্ত এবং বিকল্প উপায় রয়েছে:
ইতিহাসের বিকল্প ( !432
বা !-4
) ব্যবহার না করে আপনি Ctrl+ এর সাহায্যে ইতিহাসটি অনুসন্ধান করতে পারেন r, এবং একবার আপনি প্রথম কমান্ডটি খুঁজে পেতে চান কীটির পরিবর্তে রান করুন, হিট Ctrl+ o( অপারেটিং এবং গেট-নেক্সট ) এটি কমান্ড আরম্ভ
করবে এবং পরবর্তীটি ইতিহাস থেকে প্রস্তাব করবে । আপনি আপনার ইচ্ছামত যতবার হিট করতে পারেন এবং শেষটি দিয়েই এই ক্রমটি শেষ করতে পারেন, বা এটি চালু না করেই থামতে পারেন।return
Ctrl+oreturnCtrl+c
Ctrl-o
এটি আঘাত করার পরে কেবল আক্ষরিক আউটপুট দেয় ^o
এবং আমার ভেঙে যায় (reverse-i-search)
। এর সাথে জড়িত থাকতে পারে অন্য কিছু সেটিংও।
কমান্ডগুলো অবিলম্বে বদলে সম্পাদনা, এখানে একটি চিহ্নগুলি সিন্টেক্সের slimmer সংস্করণ Eval ব্যবহার জাইলস উত্তর :
fc -e: 432 435
কোলন আর্গুমেন্ট টু-ই হ'ল বাশ নূপ, যা এফসি চায় "এডিটরে খোলা" পদক্ষেপটি এড়িয়ে যাওয়ার প্রভাব ফেলে। এছাড়াও, এখন (সাম্প্রতিক) ইতিহাসে ইতিহাসের প্রকৃত আদেশগুলি স্পষ্ট বিবৃতি না দিয়ে ধারণ করবে।
fc
লুপ জন্য এবং xsel
যখন আমি শেষ এন কমান্ডগুলি একাধিকবার যুক্ত করতে এবং পুনরায় চালাতে চাই তখন এটি ভালভাবে কাজ করে:
fcn() (
from="${1:-2}"
to="${2:-1}"
if [ "$from" -ne "$to" ]; then
for i in `seq "$from" -1 "$(($to + 1))"`; do
printf "$(fc -ln -${i} -${i}) && "
done
fi
printf "$(fc -ln -${to} -${to})"
)
তারপর:
$ echo a
a
$ echo b
b
$ echo c
c
$ fcn 3 1 | xsel -b
$ # Paste.
$ echo a && echo b && echo c
a
b
c
$ # Paste again if you feel like it.
$ echo a && echo b && echo c
a
b
c
অথবা বৃহত্তর কমান্ডগুলির জন্য যাদের কিছু সম্পাদনার প্রয়োজন হতে পারে:
fcn 3 1 >cmds.sh
vi cmds.sh
bash cmds.sh
bash cmds.sh
history -p \!43{2..5}
পরবর্তী কপি / পেস্টের জন্য উপযুক্ত 432 থেকে 435 টার্মিনালে মুদ্রণ করতে পারেন ।