বাশ ইতিহাস থেকে শেষ এন লাইনগুলি মুছুন


40

দুর্ঘটনাক্রমে শেলটিতে কোনও ফাইল পেস্ট করার সময় এটি ব্যাশ ইতিহাসে এক টন কুৎসিত বাজে কথা লিখছে। এই এন্ট্রিগুলি সরানোর কোনও পরিষ্কার উপায় নেই? স্পষ্টতই আমি শেলটি বন্ধ করতে এবং .bash_historyম্যানুয়ালি ফাইলটি সম্পাদনা করতে পারতাম তবে সম্ভবত বর্তমান শেলের ইতিহাস সংশোধন করার জন্য কোনও ধরণের এপিআই উপলব্ধ আছে?

উত্তর:


36

আপনি history -d offsetবর্তমান শেলের ইতিহাস থেকে একটি নির্দিষ্ট লাইন মুছতে বা history -cপুরো ইতিহাস সাফ করার জন্য বিল্টিন ব্যবহার করতে পারেন ।

আপনি যদি অনেকগুলি লাইন সরিয়ে ফেলতে চান তবে এটি বাস্তবিকই কার্যকর নয়, কারণ এটি কেবল একটি অফসেটটিকে আর্গুমেন্ট হিসাবে গ্রহণ করে তবে আপনি এটি একটি লুপের সাহায্যে মুড়ে ফেলতে পারেন।

rmhist() {
    start=$1
    end=$2
    count=$(( end - start ))
    while [ $count -ge 0 ] ; do
        history -d $start
        ((count--))
    done
}

সাথে কল rmhist first_line_to_delete last_line_to_delete। (আউটপুট অনুযায়ী লাইন নম্বর history।)

( history -wইতিহাসের ফাইলে কোনও লেখার জন্য চাপ দেওয়ার জন্য ব্যবহার করুন))


1
যেহেতু ওপি এন শেষ লাইনগুলি মুছে ফেলার জন্য বলেছে , তাই এই স্ক্রিপ্টটি এমন কিছু করার মাধ্যমে সংশোধন করা উচিত: tot_lines=$(history | wc -l)এবং তারপরে পুনরাবৃত্তি করুন history -d $(( tot_lines - $1 ))
প্লাজমাবিন্টুরং

2
পরিবর্তে $(history | wc -l), এখানে পরিবর্তনশীল $HISTCMDব্যবহার করা যেতে পারে।
প্লাজমাবিন্টুরং

29

কমান্ড প্রম্পটে এই কেবল একটি লাইন সাহায্য করবে।

for i in {1..N}; do history -d START_NUM; done

যেখানে START_NUM ইতিহাসে প্রবেশের অবস্থান শুরু করছে। এন হ'ল আপনি মুছে ফেলতে পারেন এমন এন্ট্রিগুলির সংখ্যা।

উদা: for i in {1..50}; do history -d 1030; done


3
আমি ভাবছি কেন এটি ইতিমধ্যে একটি অন্তর্নির্মিত ফাংশন নয়। 'ইতিহাস' একটি অতি প্রাচীন সরঞ্জাম।
পেটর গ্ল্যাডকিখ

উদ্দেশ্যটি খুব ভালভাবে পরিবেশন করেছে, তবে এই আদেশটি ইতিহাসে দেখা যাবে :)
রাজীব আওকতকার

Askubuntu.com/a/978276/22866 ইতিহাস থেকে "ইতিহাস কমান্ড থেকে মুছুন" মুছে ফেলার একটি দুর্দান্ত উপায় রয়েছে :-)
হানসুলু

0

ব্যবহারকারী 2982704 এর উত্তর প্রায় আমার জন্য কাজ করেছে তবে বেশ নয় not আমাকে এভাবে একটি ছোট পরিবর্তন আনতে হয়েছিল।

আমার ইতিহাস ধরে নেওয়া 1000 এর এবং আমি সর্বশেষ 50 টি এন্ট্রি মুছতে চাই

start=1000

for i in {1..50}; do count=$((start-i)); history -d $count; done
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.