ইতিহাস - কেবলমাত্র সফলভাবে চালিত কমান্ডের তালিকা করুন


10

আমি ভাবছি হিস্ট্রি কমান্ড ব্যবহারের উপায় আছে কিনা তবে কেবল সফলভাবে চালিত কমান্ডগুলির তালিকা তৈরি করুন। তেমনি, ত্রুটি তৈরি করে এমনগুলির তালিকা তৈরি করার কোনও উপায় থাকবে?

আমি জানি প্রতিটি কমান্ডের একটি প্রস্থান স্থিতি রয়েছে:

0- কমান্ডের সফল সম্পাদন
1- প্রসারণ বা পুনঃনির্দেশের সময় ত্রুটির কারণে কমান্ড ব্যর্থ হয়, প্রস্থান পরিস্থিতি শূন্যের চেয়ে বেশি।
2- কমান্ডের ভুল ব্যবহার
12- কমান্ড পাওয়া গেলেও কার্যকর হয়নি
127- কমান্ড পাওয়া যায় নি

এবং কমান্ডটি প্রেরণ করে এখানে echo $?
থেকে পরীক্ষা করা যায়: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html

উদাহরণ:

এই 4 টি কমান্ড চালানোর পরে:

ls
help
lss
ls nonexistentfile

আমি কেবল সফল কমান্ড (0 এর প্রস্থান স্থিতি) মুদ্রণের জন্য পরীক্ষার চেষ্টা করেছি, যা কেবল 'ls' এবং 'সহায়তা' হওয়া উচিত:

for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out

এই ফলাফলগুলি:

ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found

এটি কিছুটা কাজ করে তবে দুটি সমস্যা রয়েছে:

  1. কোনও কারণে, grep -v 'bash''বাশ' সম্বলিত লাইনগুলি বাদ দিচ্ছে না grep 'bash', তবে আমি যদি এটি করি তবে এটিতে 'বাশ' যুক্ত রেখাগুলি অন্তর্ভুক্ত থাকবে, আমি নিশ্চিত না কেন কেন একটি কাজ করে এবং অন্যটি নয় not
  2. এটি স্ট্রিং দ্বারা প্রতিটি লাইন / কমান্ডকে পৃথক করছে। শেষ lsকমান্ডটি হওয়া উচিত
    ls nonexistentfile, তবে এটি চলমান lsএবং nonexistentfileপৃথক কমান্ড হিসাবে।

কমান্ডটিতে আমার কী সামঞ্জস্য করা উচিত সে সম্পর্কে কোনও ধারণা, বা কীভাবে এটি করা যায়?

উত্তর:


4

কে এটি করেছে তা ট্র্যাক করার জন্য আমি একটি শেয়ার করা অ্যাকাউন্টে একবার ব্যবহার করেছি এটি হ্যাক:

PROMPT_COMMAND="history -a; sed -i '\$s/\$/ \#$NAME/' $HISTFILE; history -r; $PROMPT_COMMAND"

এটি প্রদর্শিত historyহওয়ার আগে লিখেছে PROMPT: কার্যত প্রতিটি কমান্ডের পরে। আপনি ইতিহাসে প্রস্থান কোডটি সংরক্ষণ করতে এটি পরিবর্তন করতে পারেন:

PROMPT_COMMAND="CODE=$?; history -a; sed -i '\$s/\$/ \#\$CODE/' $HISTFILE; history -r; $PROMPT_COMMAND"

এটি আপনার ইতিহাসে এন্ট্রিগুলি ছেড়ে দেবে:

$ history 2
 1271  vim .bashrc #0
 1272  history 2

( কমান্ডটি প্রস্থান করার পরে শেষ এন্ট্রি আপডেট করা হবে history, সুতরাং এই আউটপুটে প্রস্থান কোডটি দৃশ্যমান হবে না))

এটি বিরক্তিকর প্রভাব ফেলেছে যে আপনার প্রম্পটে ইতিহাস মন্তব্য করবে:

$ # press up
$ history 2 #0

মন্তব্যটি কার্যকরভাবে সম্পাদন বা আউটপুটকে প্রভাবিত করে না, তবে সম্পাদনাকে ব্যথা করে।

এখন grepআপনার ইতিহাসটি দেখতে পাবে কোন কোডগুলি সফলভাবে উপস্থিত হয়েছিল:

history | grep '#0$'
# or grep '#[^0]*$' for unsuccessful commands.

আমি এটি মোব্যাক্সটার্ম এবং পুট্টি উভয়েই চেষ্টা করে দেখেছি এবং ls #$CODE, ll #$CODEইতিহাসের ফলাফল পেয়েছি । এটি আপনার পক্ষে কাজ করে কিনা আমি নিশ্চিত নই, তবে আমাকে পরিবর্তন sed -i '\$s/\$/ \#\$CODE/' $HISTFILE'করতে হয়েছিল sed -i '\$s/\$/ \#$CODE/' $HISTFILE। আমি
কোডের

@ এলকিসাক অদ্ভুতভাবে আমার জন্য, এটি #এড়ানো ছাড়া কোনও কোড দেয় (কোনও কোড নেই)। কিছু উদ্ধৃত ইস্যু হতে হবে।
মুড়ু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.