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


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.