বাশ ইতিহাসে আদেশগুলি প্রদর্শিত হতে আমি কীভাবে বাধা দেব?


96

কখনও কখনও, যখন আমি কমান্ডগুলি চালিত করি তখন আমি rm -rf XYZবাশ ইতিহাসে এটি লিপিবদ্ধ করা চাই না, কারণ আমি ঘটনাক্রমে আবার একই কমান্ডটি চালিয়ে যেতে পারি reverse-i-search। এটি হওয়ার থেকে রোধ করার জন্য কি কোনও ভাল উপায় আছে?



যদিও bash পারে শেল স্ক্রিপ্ট লেখা (অত: পর প্রোগ্রামিং) জন্য ব্যবহার করা যেতে, এই বিশেষ এটা দৃষ্টিভঙ্গি একেবারে কিছুই প্রোগ্রামিং সঙ্গে কাজ করতে (ইতিহাস একটি ইন্টারেক্টিভ শুধুমাত্র জিনিস) আছে। ভোট বন্ধ
প্যাক্সিডিয়াবলো

উত্তর:


114

যদি আপনি HISTCONTROLপরিবেশের পরিবর্তনশীল ignoreboth(যা সাধারণত ডিফল্ট অনুসারে সেট করা থাকে) সেট করে থাকেন তবে একটি শীর্ষস্থানীয় স্পেস ক্যারেক্টারের কমান্ড ইতিহাসে সংরক্ষণ করা হবে না (পাশাপাশি নকলও)।

উদাহরণ স্বরূপ:

$ HISTCONTROL=ignoreboth
$ echo test1
$  echo test2
$ history | tail -n2
 1015  echo test1
 1016  history | tail -n2

এখানে কি man bashবলে:

হিস্টট্রোল

ইতিহাস তালিকায় কমান্ডগুলি কীভাবে সংরক্ষণ করা হয় তা নিয়ন্ত্রণ করে মানগুলির একটি কোলন-বিভাজিত তালিকা। মূল্যবোধের তালিকা অন্তর্ভুক্ত থাকে ignorespace, লাইন যা একটি স্থান অক্ষর দিয়ে শুরু ইতিহাস তালিকায় সংরক্ষিত হয় নাignoredupsপূর্ববর্তী ইতিহাসের এন্ট্রিটির সাথে মিলিত কারণগুলির একটি মান সংরক্ষণ করা যায় না। এর মান ignorebothশর্টহ্যান্ড ignorespaceএবং এর জন্য ignoredupserasedupsপূর্ববর্তী সমস্ত রেখার সাথে মিলিত হওয়ার কারণগুলির একটি মান সেই লাইনটি সংরক্ষণের আগে ইতিহাসের তালিকা থেকে সরানো হবে। উপরের তালিকায় নেই এমন কোনও মান উপেক্ষা করা হবে। যদি HISTCONTROLসেট না করা থাকে বা কোনও বৈধ মান অন্তর্ভুক্ত না করা হয়, শেল পার্সার দ্বারা পঠিত সমস্ত লাইন ইতিহাসের তালিকায় সংরক্ষণ করা হয়, এর মান সাপেক্ষেHISTIGNORE। মাল্টি-লাইন যৌগিক কমান্ডের দ্বিতীয় এবং পরবর্তী লাইনগুলি পরীক্ষা করা হয় না, এবং মান নির্বিশেষে ইতিহাসে যুক্ত করা হয় HISTCONTROL

আরো দেখুন:


53

আপনার .bashrc / .Bash_profile / যেখানে আপনি চান সেখানে লাগান export HISTIGNORE=' *'। তারপরে আপনি যে কোনও কমান্ডটি একটি স্পেস দিয়ে উপেক্ষা করতে চান তা শুরু করুন।

$ ls  # goes in history
$  ls # does not

4
এটি HISTCONTROLপরিবেশ পরিবর্তনশীলের মানের উপর নির্ভর করে , যা অগত্যা ignorespaceসেট করে না ।
sorpigal

4
যদি HISTCONTROLএতে থাকে তবে এটিতে ignorespace`*` অন্তর্ভুক্ত করা কেবলমাত্র অনর্থক HISTIGNORE। দুজন স্বতন্ত্রভাবে পরিচালনা করে।
চিপনার

22

আরও ভাল ব্যবহার HISTIGNORE। এটি আপনাকে উপেক্ষা করার জন্য নিদর্শনগুলির একটি সেট নির্দিষ্ট করতে দেয় (যেমন rm)। এটা ভাল (আমার ধারণা) শুধু সব ইতিহাস বংশীধ্বনিতুল্য চেয়ে /dev/null


হ্যাঁ হ্যাঁ, তার সম্পর্কে ভুলে গেছেন :)
কোরি হেন্ডারসন

13
kill -9 $$

আমি জানি এটি পূর্ববর্তী উত্তরের মতো সেরা নয় তবে এটি কোনও কিছুই না বাছাই করে বর্তমান ব্যাশ শেলটি মেরে ফেলবে, যখন এইচআইএসটি কনট্রোলটি ডিফল্টরূপে সেট না করা হয়, আপনি সেট করতে ভুলে গিয়েছিলেন, বা খাঁটি এবং সহজ আপনি একটি শীর্ষস্থানীয় স্থান রাখতে ভুলে গিয়েছিলেন এবং আপনি কেবল কয়েকটি পাসওয়ার্ড টাইপ করেছেন এবং চান না যে সেগুলি ইতিহাসে স্থায়ীভাবে থেকে যায়।

এটি দ্রুত উপায় এবং ইতিহাস ফাইল মুছে ফেলার মতো কিছু ভাল নয় কারণ আপনাকে ইতিহাস সংরক্ষণের শেলের বাইরে এটি করতে হবে (বিভিন্ন ব্যবহারকারী হিসাবে লগ ইন করুন এবং su / sudo ব্যবহার করুন, একটি পটভূমি কাজ তৈরি করা ইত্যাদি) etc.


8

আপনি দুটি কাজের একটি করতে পারেন:

export HISTFILE=/dev/null

অথবা, একটি স্থান দিয়ে কমান্ড শুরু করুন।


4
দুর্দান্ত হওয়ার আগে একটি জায়গা
এরিক ফোর্টিস

8
আমাদের মধ্যে কেউ কেউ মনে করে যে কোনও স্থানের উপসর্গযুক্ত অটো-উপেক্ষা করার আদেশগুলি সত্যই খারাপ ধারণা এবং তাই এটি ignorespaceডিফল্টরূপে সেট করা হয়নি।
sorpigal

4
HISTFILEএইভাবে সেট করা কোনও ইতিহাস সঞ্চিত করতে বাধা দেয় এবং কমান্ডটিকে মেমরির ইতিহাসে যুক্ত হতে বাধা দেয় না।
চিপনার

3

বা

unset HISTFILE

(কেবলমাত্র পূর্ববর্তী উত্তরের মতোই: হিস্টফিল = / দেব / নাল রফতানি করুন)


4
এটি কেবল অনস্ক্রিয় ইতিহাসকেই প্রভাবিত করে, মেমরির ইতিহাস নয়।
চিপনার

2

শেল প্রারম্ভকালে, আমি উপস্থিত থাকতে চাই না এমন এন্ট্রিগুলি থেকে আমি স্পষ্টতই ইতিহাসটি পরিষ্কার করি। উদাহরণস্বরূপ, আমি চাই না কোন চান rm -rfইতিহাস (এটা মানসিক আঘাত মধ্যে একটি ডিরেক্টরি রাতারাতি প্রক্রিয়াজাত ফলাফল পূর্ণ সরানোর, শুধু একটি একক সঙ্গে পরে Arrow-Up+ + Enter:)

আমি আমার স্নাতক ফাইলটিতে নিম্নলিখিত স্নিপেটটি রেখেছি (এতে কাজ করা .zshrcউচিত, এর সাথেও কাজ করা উচিত .bashrc)

# ...
HISTFILE=~/.zshhistory
# ...

# remove dangerous entries from the shell history
temp_histfile="/tmp/$$.temp_histfile"
grep -v -P '^rm .*-rf' $HISTFILE > $temp_histfile
mv $temp_histfile $HISTFILE
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.