ইতিহাস থেকে ধারাবাহিক কমান্ড কিভাবে কার্যকর করা যায়?


49

ধরুন আমি আগে চালিত চারটি কমান্ডের একটি ক্রম সম্পাদন করতে চাই। কমান্ড-ইতিহাসে যদি প্রথমটি 432 হয় তবে আমি এটি করতে পারি:

$ !432; !433; !434; !435

আমি কৌতূহলী, এটি সম্পাদন করার আরও কার্যকর উপায় আছে কি?


1
এটি কোনও উত্তর হিসাবে পোস্ট করা হচ্ছে না কারণ এটি আদেশগুলি কার্যকর করে না , তবে আপনি history -p \!43{2..5}পরবর্তী কপি / পেস্টের জন্য উপযুক্ত 432 থেকে 435 টার্মিনালে মুদ্রণ করতে পারেন ।
— ওয়াইল্ডকার্ড

উত্তর:


48

যদি এটি সাম্প্রতিক সময়ে পরিচালিত আদেশগুলি বোঝায়, আরও কার্যকর উপায় হ'ল negativeণাত্মক সংখ্যার সাথে তাদের উল্লেখ করা:

!-4; !-3; !-2; !-1

এছাড়াও, একবার এটি করা হয়ে গেলে, আপনার শেষ ইতিহাসের এন্ট্রিতে সম্পূর্ণ কমান্ডের শৃঙ্খলা থাকবে, যাতে আপনি এটি দিয়ে পুনরাবৃত্তি করতে পারেন !!।


সম্পাদনা: আপনি ইতিমধ্যেই না থাকে, তাহলে মহান builtin ফাংশন এর সাথে পরিচিত fc, গিলেজ উল্লেখ । (ব্যবহার করুন help fc।) দেখা যাচ্ছে যে আপনি এটির সাথে নেতিবাচক সংখ্যাগুলিও ব্যবহার করতে পারেন, তাই আপনি উপরে ব্যবহার করে একই ব্যবহার করতে পারেন

eval "`fc -ln -4 -1`"

এটির একটি সতর্কতা রয়েছে, যদিও: এর পরে, evalলাইনটি ইতিহাসে শেষ কমান্ড হিসাবে সংরক্ষণ করা হয়। সুতরাং আপনি যদি এটি আবার চালনা করেন তবে আপনি লুপে পড়ে যাবেন!

এটির একটি নিরাপদ উপায় হ'ল ডিফল্ট fcঅপারেশন মোডটি ব্যবহার করা : নির্বাচিত কমান্ডের সীমাটি কোনও সম্পাদকের কাছে ফরোয়ার্ড করা এবং এখান থেকে প্রস্থান করার পরে সেগুলি চালানো। চেষ্টা করুন:

 fc -4 -1

এমনকি কমান্ডের ব্যাপ্তির ক্রমটি বিপরীত করতে পারেন: fc -1 -4


আমি যা পড়েছি তা পড়েছি ... LOL। বাস্তবিক, আমি নিশ্চিত নই reinvoke ( reinvoke হয়তো?), কিন্তু বলার জন্য ধন্যবাদ :) আমি সবসময় সংশোধন প্রশংসা করি।
— rozcietrzewiacz

স্ক্র্যাবলফাইন্ডার ডট কম বলেছেন যে পুনরায় নেওয়া একটি বৈধ স্ক্র্যাবল শব্দ। এর চেয়ে বেশি নির্দিষ্ট কিছু পেতে পারি না। :)
— বেন্টএফএক্স

1
এটির মতো একটি ভাল উত্তর (+1) সহ, আপনি এটি কীভাবে বানান তা বিবেচ্য নয়; বিশেষত দুটি বানানের ফর্মটি তিনটি প্রধান ইংরেজি অভিধানে দেখা যায়: অক্সফোর্ড, ক্যামগ্রিজ, মেরিয়ামিয়াম-ওয়েস্টার (আমি হাইফেনের জন্য যাব)
— পিটার.ও

34

ইতিহাসে কমান্ডের একটি সীমা দেখতে অন্তর্নির্মিত fcকমান্ডটি ব্যবহার করুন :

fc -ln 432 435

এগুলি আবার কার্যকর করতে:

eval "$(fc -ln 432 435)"

4
খুব সুন্দর. আমি যদিও কৌতূহলী, কেন man fcআমাকে কিছু দেয় না। কি fcদাঁড়াবে? অন্যান্য অপশন আছে কি?
— এরিক উইলসন

2
@ এরিক উইলসন ... টাইপ করুন help fc... এবং এছাড়াও help help.... সহায়তা: সহায়তা [-dms] [প্যাটার্ন ...] বিল্টিন কমান্ড সম্পর্কে তথ্য প্রদর্শন করুন।
— পিটার.ও

আমি আপনার উত্তরটি সন্ধান করে এখানে ফিরে এসেছি। এটি সত্যিই একটি দুর্দান্ত বিল্টিন! বিশেষত যখন আপনি এর ডিফল্ট কার্যকারিতা হয় - কোনও সম্পাদককে পুনরায় খেলার জন্য কমান্ডের একটি পরিসর পরিবর্তন করতে অনুরোধ করা হচ্ছে। ধন্যবাদ, গিলস
— rozcietrzewiacz

1
-lপতাকা ছাড়াই , এটি অশুভের প্রয়োজন ছাড়াই কার্যকর করা হবে eval।
— বার্নহার্ড

1
@ এরিকউইলসন একটি গুগল অনুসন্ধান আমাকে "সংক্ষেপে ইউনিক্স" বইয়ের দিকে নিয়ে যায় যা বলে যে "ফাইন্ড fcকমান্ড" বা "ফিক্স কমান্ড" বোঝায়।
— স্লোথ ওয়ার্কস

10

বাশ ইতিহাস থেকে ক্রমানুসারে বেশ কয়েকটি কমান্ড চালানোর জন্য একটি দুর্দান্ত এবং বিকল্প উপায় রয়েছে:
ইতিহাসের বিকল্প ( !432বা !-4) ব্যবহার না করে আপনি Ctrl+ এর সাহায্যে ইতিহাসটি অনুসন্ধান করতে পারেন r, এবং একবার আপনি প্রথম কমান্ডটি খুঁজে পেতে চান কীটির পরিবর্তে রান করুন, হিট Ctrl+ o( অপারেটিং এবং গেট-নেক্সট ) এটি কমান্ড আরম্ভ করবে এবং পরবর্তীটি ইতিহাস থেকে প্রস্তাব করবে । আপনি আপনার ইচ্ছামত যতবার হিট করতে পারেন এবং শেষটি দিয়েই এই ক্রমটি শেষ করতে পারেন, বা এটি চালু না করেই থামতে পারেন।return
Ctrl+oreturnCtrl+c


হুম, আমি Ctrl-oএটি আঘাত করার পরে কেবল আক্ষরিক আউটপুট দেয় ^oএবং আমার ভেঙে যায় (reverse-i-search)। এর সাথে জড়িত থাকতে পারে অন্য কিছু সেটিংও।
— সিরো সান্তিলি: 改造 中心 法轮功 六四 事件

8

কমান্ডগুলো অবিলম্বে বদলে সম্পাদনা, এখানে একটি চিহ্নগুলি সিন্টেক্সের slimmer সংস্করণ Eval ব্যবহার জাইলস উত্তর :

fc -e: 432 435

কোলন আর্গুমেন্ট টু-ই হ'ল বাশ নূপ, যা এফসি চায় "এডিটরে খোলা" পদক্ষেপটি এড়িয়ে যাওয়ার প্রভাব ফেলে। এছাড়াও, এখন (সাম্প্রতিক) ইতিহাসে ইতিহাসের প্রকৃত আদেশগুলি স্পষ্ট বিবৃতি না দিয়ে ধারণ করবে।


0

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