আমি কীভাবে কোনও ফাইলটিতে শেষ কমান্ডটি সংরক্ষণ করতে পারি?


29

আমি যখন ব্যাশ শেলটি ব্যবহার করে আমার বিশ্লেষণগুলি চালাচ্ছি, আমি প্রায়শই আমি যে কমান্ডগুলি ব্যবহার করেছি সেগুলি সংরক্ষণ করতে চাই যা একই ডিরেক্টরিতে (আমার "লগবুক" নামে পরিচিত) একটি ফাইলের ফলে আমাকে ভাল ফলাফল দেয় যাতে আমি কী পরীক্ষা করতে পারি আমি এই ফলাফলগুলি পেতে। এখনও পর্যন্ত এটি আমার অর্থ হ'ল হয় কপি করে টার্মিনাল থেকে কমান্ডটি আটকানো বা "আপ" টিপতে টিপতে কমান্ডটি একটি echo"my command" >> LOGBOOK, বা অন্যান্য অনুরূপ অ্যান্টিক্সে পরিবর্তন করতে হবে ।

আমি দেখতে পেয়েছিলাম historyযে অন্য দিন একটি সরঞ্জাম ছিল , তবে আমি পূর্বে সম্পাদিত কমান্ডটি পাওয়ার জন্য এটির কোনও উপায় খুঁজে পাচ্ছি না যাতে আমি এর মতো কিছু করতে পারি getlast >> LOGBOOK

এটি করার একটি দুর্দান্ত উপায় আছে কি? বিকল্পভাবে, অন্যরা কীভাবে তাদের ফলাফলের জন্য আদেশগুলি সংরক্ষণ করে তা মোকাবেলা করে?

উত্তর:


37

আপনি যদি ব্যবহার করেন তবে আপনি নিজের ইতিহাসটি যেভাবে চান তা প্রদর্শন করতে কমান্ডটি bashব্যবহার fcকরতে পারেন:

fc -ln -1

এটি আপনার শেষ কমান্ডটি মুদ্রণ করবে। -lএর অর্থ তালিকা, এর -nঅর্থ কমান্ড সংখ্যা সহ লাইনগুলিকে উপস্থাপন না করা এবং -1সর্বশেষ কমান্ডটি প্রদর্শন করতে বলা হয়েছে। যদি লাইনের শুরুতে শ্বেত স্থানটি (মাল্টি-লাইন কমান্ডগুলির মধ্যে প্রথম লাইনটি) বিরক্তিকর হয় তবে আপনি সহজেই এটিকে সহজেই মুক্তি দিতে পারেন sed। এটি একটি শেল ফাংশন হিসাবে তৈরি করুন, এবং আপনার অনুরোধ হিসাবে সমাধান রয়েছে ( getlast >> LOGBOOK):

getlast() {
    fc -ln "$1" "$1" | sed '1s/^[[:space:]]*//'
}

আপনি আপনার প্রশ্ন জিজ্ঞাসা করা হয়েছে যে এটি কাজ করা উচিত।

আমি যুক্ত করে কিছুটা প্রকরণ যোগ "$1" "$1"করেছিfc কমান্ড। এটি আপনাকে বলতে দেবে, উদাহরণস্বরূপ, getlast mycommandশেষ কমান্ড লাইনটি প্রিন্ট করার জন্য mycommand, সুতরাং যদি আপনি অন্য কমান্ড চালানোর আগে সংরক্ষণ করতে ভুলে যান তবে আপনি সহজেই কোনও আদেশের শেষ উদাহরণটি সংরক্ষণ করতে পারেন save আপনি যদি কোনও যুক্তি পাস না করেন getlast(যেমন fcহিসাবে প্রার্থনা করুন fc -ln "" "", এটি কেবলমাত্র শেষ আদেশটি প্রিন্ট করে)।

[দ্রষ্টব্য: @ ব্রামের মন্তব্যে এবং @্লেইন জ্যাকম্যানের উত্তরে উল্লিখিত ইস্যুর জন্য অ্যাকাউন্টে সম্পাদিত উত্তর।]


5
প্রথম ফর্ম fc -lnr | head -n 1সংক্ষেপে বলা যেতে পারে fc -lnr -1
ব্রাম

@ ব্র্যাম: ভাল জিনিস। আমি help fcআমার ডকুমেন্টেশনের জন্য ব্যবহার করছিলাম। ব্যাশ ম্যান পৃষ্ঠাতে নেতিবাচক সূচকগুলির ব্যবহার সহ আরও বিশদ রয়েছে। নির্মূল headকরা ভাল কারণ এক কমান্ডটি বামে অন্তর্নির্মিত তাই এখন কাঁটাচামচ / নির্বাহের কোনও দরকার নেই।
ক্যাম এ

1
কমান্ডটি কেন বলা হচ্ছে তা অবাক করে দিয়েছি fc...
ইম্জ - ইভান জাখারিয়াচেভ


9

@ ক্যামের উত্তরের একটি সমস্যা হ'ল যদি আপনার কাছে এমন একটি কমান্ড থাকে যা একাধিক লাইন ছড়িয়ে দেয় তবে এটি কেবল প্রথম লাইনটি দেখায়:

$ echo "one
> two
> three"
one
two
three

$ fc -lnr | head -1
         echo "one

এটা চেষ্টা কর:

$ alias getlast='fc -nl $((HISTCMD - 1))'

$ echo "one
> two
> three"
one
two
three

$ getlast
         echo "one
two
three"

3
সক্ষম করা cmdhistএটি ঠিক করবে: "যদি সেট করা থাকে তবে ব্যাশ একই ইতিহাসের এন্ট্রিতে একাধিক-লাইন কমান্ডের সমস্ত লাইন সংরক্ষণের চেষ্টা করে This এটি মাল্টি-লাইন কমান্ডগুলির পুনরায় সম্পাদনা করার অনুমতি দেয়" "
মার্ক ম্যাককিনস্ট্রি

2

উপরের তীরটি ব্যবহার না করে আপনি "!!"পূর্ববর্তী কমান্ডটি ব্যবহার করতে পারেন ।

যেমন

$ some -long --command --difficulty="very hard to remember"
$ echo "!!" >> LOGBOOK

দ্রষ্টব্য: এটি আক্ষরিক পাঠ্যের উদ্ধৃতি দেয় না


5
এটি আক্ষরিক আদেশটি ক্যাপচার করবে না। যদি কোনও শেল মেটাচার্যাক্টর থাকে তবে সেগুলি মূল্যায়ন করে প্রতিস্থাপন করা হবে। পাইপলাইনগুলিও ভেঙে যাবে: ls | less-> echo !! >> LOGBOOK-> echo ls | less >> LOGBOOK
ক্যাম

0

আপনি বাশ শেল ব্যবহার করে নিচের কমান্ডের সাহায্যে এটি করতে পারেন:

$> history -a LOGBOOK

এটি আপনার বর্তমান আদেশ থেকে সেই ফাইলটিতে সমস্ত কমান্ড যুক্ত করবে, একক কমান্ডের সাহায্যে আপনি এটি করতে আপনার ~ / .bashrc ফাইলটিতে একটি উপাধি যুক্ত করতে পারেন:

$> alias getlast="history -a LOGBOOK"

1
তবে আপনি যে আরও গুরুত্বপূর্ণ প্রয়োজনটি অনুভব করছেন আমি কেবল সেই আদেশগুলি সংরক্ষণ করেছি যা আমার কাজ করেছে এবং ফল পেয়েছে। আমি চাই না সংরক্ষণ করতে চান সব সাম্প্রতিক কমান্ড আমি কাজ করেছি, শুধু সেটি সিলেক্ট পর আমি তাদের ব্যবহার করেছি। যাই হোক ধন্যবাদ.
ম্যাটলব্যাক 7'12
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.