বাশ ইতিহাসে কমান্ডের একটি সিরিজ চালানোর জন্য একটি শর্টকাট উপস্থিত রয়েছে?


20

ধরা যাক আমার মধ্যে নিম্নোক্ত উদাহরণ রয়েছে history:

...
76 cd ~
77 ./generator.sh out.file
78 cp out.file ~/out/
79 ./out/cleaner.sh .
80 ls -alnh /out
...

যদি আমি কমান্ডগুলো চেয়েছিলেন 77, 78এবং 79এক কমান্ডে, এই জন্য একটি শর্টকাট অস্তিত্ব না? আমি চেষ্টা করেছি !77 !78 !79, যা কার্যকরভাবে চালিয়ে যাওয়ার জন্য তাদের সকলকে একক লাইনে রাখবে।


9
কি !77 ; !78 ; !79ঠিক আছে তো?
18:30 এ ট্রিগার

1
আমার ধারণা লাইন দ্বারা টাইপ লাইন সংক্ষিপ্ত কিছু ঠিক আছে, তবে কিছুটা আরও সংক্ষিপ্ত (আশা করি লাইন বরাবর !77-79) জন্য আশা করছিলাম
MrDuk

1
@ মিঃডুক, ছেলেটি আমাকে মনে রাখতে কিছুটা সময় নিয়েছিল। খুব সংক্ষিপ্ত সমাধানের জন্য আমার আপডেট হওয়া উত্তরটি দেখুন ! :)
ওয়াইল্ডকার্ড

এটা যাদু! :)
মিঃডুক

উত্তর:


28

সম্পাদনা: আপনি ফিক্স কমান্ড সরঞ্জামেরfc সাথে পসিক্স-সম্মতিযুক্ত ফ্যাশনে এটি করতে পারেন :

fc 77 79

এটি আপনার সম্পাদকটি (সম্ভবত vi) বাফারে through 77 থেকে 79৯ পর্যন্ত কমান্ড সহ খুলবে । আপনি যখন সংরক্ষণ এবং প্রস্থান করবেন ( :x), কমান্ডগুলি চালিত হবে।


আপনি যদি এগুলি সম্পাদনা করতে না চান এবং আপনি খুব নিশ্চিত হন যে আপনি কোন আদেশগুলি কল করছেন তা আপনি জানেন, আপনি ব্যবহার করতে পারেন:

fc -e true 77 79

trueকমান্ডগুলি সম্পাদনা করতে এটি "সম্পাদক" হিসাবে ব্যবহার করে , সুতরাং এটি কোনও পরিবর্তন না করেই প্রস্থান করে এবং কমান্ডগুলি যেমন চলছে তেমন চালানো হয়।


মূল উত্তর:

তুমি ব্যবহার করতে পার:

history -p \!{77..79} | bash

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


আরও ভাল সমাধান (মাইকেল হফম্যানকে মন্তব্যে আমাকে স্মরণ করিয়ে দেওয়ার জন্য ধন্যবাদ) হ'ল:

eval "$(history -p \!{77..79})"

খুব, খুব কম ক্ষেত্রে একটি যেখানে evalসত্যই উপযুক্ত!


আরও দেখুন:


2
কোনও কার্যকর আদেশ কার্যকর করতে পারে যদি কমান্ডের কারওর সাথে বর্তমান প্রয়োগের পরিবেশ পরিবর্তন হয়, যেমন ভেরিয়েবল পরিবর্তন করে বা একটি করে cd, তবে এটি একটি প্রান্তের কেস।
জি-ম্যান

3
eval "$(history -p \!{77..79})"কাজ করা উচিত.
মাইকেল হফম্যান

1
@ মিশেলহফম্যান, আমি এটির কথা ভেবেছিলাম এবং ভেবেছিলাম চেষ্টা করেছি, তবে আমি বুঝতে পেরেছিলাম যে আমি উদ্ধৃত বাকী রেখেছি! ডি আহা! আশ্চর্যজনকভাবে এটি কার্যকর হয়নি ... উত্তর এখন সম্পাদনা করুন।
ওয়াইল্ডকার্ড

14

সহজ উত্তর: পরিবর্তে !77 !78 !79,

  • !77; !78; !79আপনি যা করতে চাইছেন তা করতে টাইপ করুন - কমান্ড 77 চালান, এবং তারপরে 78 কমান্ড, এবং তারপরে command৯ কমান্ড শর্তহীন, বা
  • !77 && !78 && !79 কমান্ড ute 77 কার্যকর করতে টাইপ করুন এবং এটি সফল হয়েছে কিনা তা পরীক্ষা করুন check এবং তারপরে, কমান্ড succeeded 77 সফল হলে, কমান্ড ute 78 ব্যবহার করুন And

সামান্য চালাক উত্তর (আপনি যদি একটি টার্মিনাল ধরণের উইন্ডোতে থাকেন):

  • পরবর্তী কমান্ডটি আপনি টাইপ করবেন তা কি হবে তা নির্ধারণ করুন।
    • এটি আপনার প্রম্পটে অন্তর্ভুক্ত করা সম্ভব; আমি বিশ্বাস করি এটি আপনার দ্বারা অন্তর্ভুক্ত \!করে PS1
    • অথবা আপনার ইতিহাসের তালিকাটি দেখুন। যদি শেষ এন্ট্রি হয় 82 history, তবে আপনার পরবর্তী কমান্ডটি 83 is
  • 83-77 = 6 বিয়োগ করুন।
  • প্রকার !-6। এটি কমান্ড 77 পুনরায় কার্যকর করবে ute
  • এটি নির্বাচন করুন !-6, এটি অনুলিপি করুন এবং এটি আটকে দিন। যেহেতু আপনার কমান্ড (77 ( ./generator.sh) এর পুনরায় কার্যকরকরণটি কমান্ড ৮ was ছিল, আপনি এখন command৮ কমান্ডে রয়েছেন , সুতরাং !-6command 78-র আদেশটি পুনরায় কার্যকর করা হবে।
  • !-6পছন্দসই হিসাবে পুনরায় পেস্ট করুন ।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.