ইতিহাস সংরক্ষণ না করে আমি কীভাবে একটি টার্মিনাল বন্ধ করব?


33

একাধিকবার আমি দুর্ঘটনাক্রমে বেশ কয়েকটি কমান্ড চালিয়েছি এবং আমার বাশ ইতিহাসকে দূষিত করেছি। আমার বাশের ইতিহাস সংরক্ষণ না করে আমি কীভাবে আমার টার্মিনালটি বন্ধ করব? আমি ফেডোরা ব্যবহার করছি।

উত্তর:


25

আপনার শেলের ইতিহাস HISTFILEভেরিয়েবল দ্বারা নির্দেশিত ফাইলে সংরক্ষণ করা হয় । তাই:

unset HISTFILE

এটি zsh এর ক্ষেত্রেও প্রযোজ্য, তবে ksh নয় যা $HISTFILEশেলটি শুরু হওয়ার সময় নির্দেশিত ফাইলে সংরক্ষণ করে (এবং বিপরীতভাবে, আপনি শেল শুরু করার পরে আপনার ইতিহাস কেএসএসে সংরক্ষণ করার সিদ্ধান্ত নেন)।


আমি ইতিহাস দূষিত করার পরে লগ আউট করার আগে আমি এটি ব্যবহার করতে পারি? এবং এই অধিবেশন এর অস্টাস্ট? আমি set HISTFILEপরের বার লগ ইন করতে হবে না? (এটি সঠিক বা ভুল হলে কেবল বলুন)

@ অ্যাসিডজম্বি 24 এটি সঠিক, আপনি যদি পরিবর্তনগুলি স্পষ্টভাবে সংরক্ষণ না করেন, তবে পরিবেশগত ভেরিয়েবলের পরিবর্তনগুলি সেশন জুড়ে সংরক্ষণ করা হবে না, যেমন আরসি ফাইলগুলিতে।
jw013

31

সংক্ষিপ্ত উত্তর:

প্রম্পটে এটি টাইপ করুন:

$ kill -9 $$

এটি শেলটি সিগন্যালটিকে ফাঁদে ফেলা, ইতিহাস সংরক্ষণ করা, চালানো , বন্ধ করা চাকরির বিষয়ে সতর্কতা বা সেই ভাল স্টাফগুলির কোনওরকম কিছু করতে সক্ষম না করে এখনই আপনার শেলটিকে তত্ক্ষণাত হত্যা করবে ~/.bash_logout

দীর্ঘ উত্তর:

দ্রষ্টব্য: এই অপশন আছে না পারস্পরিক একচেটিয়া; সেগুলি একবারে ব্যবহার করা যেতে পারে।

বিকল্প 1:

আপনি যদি হিস্ট্রি ফাইলটি তালগোল পাকানোর কথা বলেন তবে আপনি যদি পারফেকশনিস্ট হন, তবে আপনি যা করতে পারেন তা হল HISTIGNOREরেকর্ড করতে চান না এমন কমান্ডের গ্লোবগুলি অন্তর্ভুক্ত করার জন্য ভেরিয়েবলটি পরিবর্তন করা। উদাহরণস্বরূপ, আপনি যোগ করে HISTIGNORE='ls*:cd*'আপনার টু ~/.bashrcতারপর কোন দৃষ্টান্ত lsএবং cdআপনার ইতিহাস ফাইল ঢোকানো নেই।

বিকল্প 2:

আপনি যদি কমান্ড-বাই-কমান্ডের ভিত্তিতে কমান্ডগুলি আপনার ইতিহাসের বাইরে চলে যায় তা নিয়ন্ত্রণ করতে চান, আপনি সেট করতে পারেন HISTCONTROL='ignorespace'যা কোনও স্থান দিয়ে শুরু হওয়া কোনও কমান্ড লাইন বাদ দেবে। ব্যবহার ignorebothপুনরাবৃত্তি লাইন বাদ যাবে। তারপরে, কমান্ড দেওয়ার আগে স্পেস বারটি চাপার ফলে এটি আপনার ইতিহাসের ফাইলটিতে প্রদর্শিত হবে না।

বিকল্প 3:

আপনি যদি এটি তৈরি করতে চান যখন আপনি টার্মিনালটি বন্ধ করার সাথে সাথে শেলটি তত্ক্ষণাত প্রস্থান হয়, আপনি trapসিগন্যালটি টার্মিনাল প্রোগ্রামটি শেলটি প্রেরণ করতে পারেন ( xtermউদাহরণস্বরূপ প্রেরণ SIGHUPকরে শেলটি প্রস্থান করার জন্য অপেক্ষা করে) এবং ইতিহাস সংরক্ষণ না করে প্রস্থান করতে পারেন এই সংকেত গ্রহণ। এটি আপনার যুক্ত করুন ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP

2
'কিল -9 $$' পদ্ধতির জন্য +1। হিস্টিগনোর ইত্যাদি কেবল পঠনযোগ্য হিসাবে সেট করা হয়েছে এমন পরিস্থিতিতে অবশ্যই এটির একটি উপায়।
কোরি হেন্ডারসন

7
আমি মনে করি না যে kill -9সমস্ত কিছু যখন ব্যর্থ হয়েছে তখন ভয়াবহ পরিস্থিতি ব্যতীত অন্য কোনও কিছুর জন্য ব্যবহার করা ভাল ধারণা ।
ক্রিস্টোফার হামারস্ট্রিম

1
স্ট্যান্ডার্ড অপারেটিং পদ্ধতি হিসাবে সিগ্কিল প্রেরণ কখনও ভাল ধারণা। হিস্টফিল আনসেট করার মতো যথাযথ পদ্ধতিগুলি ব্যবহার করুন।
আর্জেজ

নিবন্ধন করুন
এম্পেটাম্যাচাইন

আমি তার বিপরীতটি জানতে চেয়েছিলাম - হায়রে বাশকে কীভাবে হত্যা করা যায় তা নিশ্চিত করেই এটি তার ইতিহাস রক্ষা করবে - এবং এটি আমার প্রশ্নের উত্তর দিয়েছে, ধন্যবাদ।
mveroone

3

আমি অবাক হয়ে দেখেছি যে এর আগে কেউ history -cতত্ক্ষণাত পরামর্শ দেয়নি exit। আইআইএনএম (আমি কোনও বিশেষজ্ঞ নই) যা দুর্দান্তভাবে করবে।


2
আপনি সঠিক পথে রয়েছেন: history -rইতিহাস ফাইলটি পুনরায় পড়বে, তাই সংরক্ষণ একটি অনির্বাচিত হয়ে যায়।
সাইমন রিখটার

ইতিহাস ফ্লাশ করা একটি খারাপ অভ্যাস ... শেল ইতিহাসে কে কী করেছে সে সম্পর্কে প্রচুর দরকারী তথ্য রয়েছে। আপনার প্ল্যাটফর্মে যারা নতুন তাদের পক্ষে এটি খুব কার্যকর (যদি আপনি ডকুমেন্টেশন, পরিবর্তন পরিচালনার বিষয়ে 100% আত্মবিশ্বাসী না হন)
ফ্র্যাঙ্কলিন পিট

2

দুটি ফাইলের ভেরিয়েবল রয়েছে যা ব্যাশ ইতিহাসের ফাইলটি নির্ধারণ করতে ব্যবহার করে এবং শেলটি যখন প্রস্থান করে তখন এটিতে কতটি লাইন লিখতে হয়।

আপনি এর যে কোনও একটি দিয়ে আপনার সেশনটির ইতিহাস ফেলে দিতে পারেন (সেশন চলাকালীন সেট করুন যা আপনি নিজের ইতিহাস ফাইল থেকে বাদ দিতে চান):

HISTFILE=/dev/null

অথবা

HISTSIZE=0

ফেডোরার বাশ-এ এই উভয়েরই কাজ সূক্ষ্ম


1

আপনি কেন আপনার কমান্ডের ইতিহাস সম্পর্কে এত যত্ন করছেন তা নিশ্চিত নন। আপনার যদি প্রায়শই নির্দিষ্ট কমান্ডের প্রয়োজন হয় তবে আপনি যদি তাদের জন্য এলিয়াসগুলি সংজ্ঞায়িত করেন তবে আপনি আরও মজা পেতে পারেন যাতে আপনি তাদের ইতিহাসে সন্ধান না করে দুটি কী-স্ট্রোক দিয়ে ফিরে পেতে পারেন।


0
  1. এলি ইতিমধ্যেই আপনি যা সেট হয় ব্যাশ জন্য সঠিক উত্তর দিয়েছেন HISTSIZE=0

  2. আমি জিএনইউ স্ক্রিনের জন্য এটি করার পদ্ধতিটি যুক্ত করব । Ctrl+Aএরপরে টিপুন (স্ক্রিন এ্যাস্ক ক্রম) :scrollback 0। এটি স্ক্রোল-ব্যাক ইতিহাস মুছে ফেলবে। এখন আপনি তাত্ক্ষণিকভাবে :scrollback 15000স্ক্রোল-ব্যাক বাফার আকারটি পুনরায় সেট করতে পারেন ।


ওপি কখন বলেছিল যে তারা ব্যবহার করছে screen(1)?
অ্যাম্ফেটামাচাইন

সে করেনি। তবে, আপনি কোনও স্ক্রিন সেশনের ভিতরে ব্যাশ চালিয়ে যেতে পারেন এবং HISTSIZE = 0 এখনও আপনার ক্রিয়াকলাপের বিশদটি স্ক্রিনের স্ক্রোল-ব্যাক বাফারে রেখে যাবে। সুতরাং, আপনি যদি সত্যিই এটি পরিষ্কার চান তবে আপনাকেও এটি করতে হবে scrollback=0
জিএসবিল

উইন্ডোটি বন্ধ হওয়ার পরে স্ক্রোলব্যাক বাফারটি সাফ হয়ে যায় (যখন শেলটি প্রস্থান করে) when আপনি যদি Ctrl-a H টাইপ করেন তবে কী হবে? এটি কি লগফিল মেরে ফেলবে?
অ্যাম্ফেটামাচাইন

@ এমফেটাম্যাচিন: না, এটি কেবলমাত্র বর্তমান উইন্ডোটির লগিং / শেষ শুরু করবে। কাছাকাছি Ctrl+a Hবা Ctrl+a :clearইতিহাস সরাবে না । আপনি প্রয়োজন Ctrl+a :scrollback 0। আপনি নিজে এটি পরীক্ষা করতে পারেন। একটি নতুন স্ক্রিন সেশন শুরু করুন। এখন একটি cat /etc/passwd। এখন, উপরের যে কোনওটি করুন - Ctrl+a Hবা Ctrl+a :clearCtrl+a [উপরের দিকে যেতে আপ ডান দিয়ে একটি ডায়িগের মাধ্যমে স্ক্রিন বাফার থেকে অনুলিপি করার চেষ্টা করুন এবং দেখুন আপনি অনুলিপি করতে কতদূর যেতে পারেন। আপনি যদি একটি Ctrl+a :scrollbackদ্বারা অনুসরণ করে থাকেন তবে clearআপনি কেবলমাত্র বর্তমান উইন্ডোতে যতদূর দেখতে পাবেন যেহেতু কোনও স্ক্রলব্যাক বাফার হবে না।
gsbabil
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.