একাধিক সেশন চলাকালীন অদ্ভুত বাশ ইতিহাসের আচরণ


15

আমি যখন একাধিক টার্মিনাল উইন্ডো ব্যবহার করি তখন কমান্ড লাইনের ইতিহাস কীভাবে সংরক্ষণ করা হয়? আমি জানি এটি এতে সঞ্চিত আছে .bash_historyতবে আমি নতুন উইন্ডো খুললে কী ইতিহাস ব্যবহৃত হবে সে সম্পর্কে যুক্তিটি দেখতে পাচ্ছি না। এটি প্রায় এক অর্থে নির্বিচারবাদী বোধ করে যে আমি নতুন উইন্ডোতে তীর ব্যবহার করার চেষ্টা করলে আমি কোন আদেশটি দেখতে পাব তা আমি কখনই জানতে পারি না।

কেউ এই ব্যাখ্যা করতে পারেন?

ইতিহাসকে এমনভাবে নিয়ন্ত্রণ করার কোনও উপায় আছে যে আমি নির্দিষ্ট উইন্ডো থেকে ইতিহাসটি পুনরায় ব্যবহার করতে পারি?

উত্তর:


14

বাশ ইতিহাসের আচরণ বুঝতে প্রথমে আপনাকে নিম্নলিখিতগুলি জানতে হবে:

  1. ইতিহাসের ফাইলটিতে ইতিহাস রয়েছে।
  2. বাশ প্রক্রিয়াটির স্মৃতিতে ইতিহাস রয়েছে।
  3. একটি বাশ প্রক্রিয়াটির স্মৃতিতে ইতিহাস অন্য কোনও বাশ প্রক্রিয়াটির স্মৃতিতে ইতিহাসের সাথে সিঙ্ক হয় না।
  4. কোনও বাশ প্রক্রিয়াটির স্মৃতিতে ইতিহাস ফাইলের ইতিহাসের সাথে সিঙ্ক করা হয় না, যদি না নির্দিষ্ট কিছু ইভেন্টে বা তার সময় স্পষ্টভাবে জিজ্ঞাসা করা হয় (নীচে দেখুন)।

ডিফল্ট সেটিংস ব্যবহার করে, ইতিহাস সম্পর্কিত বাশ সেশনের জীবনচক্রটি নিম্নরূপ:

  1. স্টার্টআপের সময় বাশ হিস্ট্রি ফাইলটি পড়বে। ইতিহাস ফাইলের সামগ্রী এখন বাশ প্রক্রিয়াটির স্মৃতিতে রয়েছে।
  2. স্বাভাবিক ব্যবহারের সময় কেবল মেমরির ইতিহাস ম্যানিপুলেটেড হয়।
  3. শাটডাউনের সময় ইতিহাসের ফাইলের আগের কোনও সামগ্রীকে ওভাররাইট করে মেমোরিতে ইতিহাস লেখা থাকে file

আপাতদৃষ্টিতে অযৌক্তিক আচরণবিরোধী আচরণ যা আপনি পর্যবেক্ষণ করেছেন বেশিরভাগ কারণ হিস্ট্রি ফাইলের বিষয়বস্তু সর্বদা শেষ বন্ধ হওয়া বাশ সেশনের ইতিহাস, এবং ব্যাশ কেবল স্টার্টআপের সময় ইতিহাস ফাইলটি পড়ে।

স্টার্টআপ এবং শাটডাউন প্রক্রিয়াটির আরও বিশদ ব্যাখ্যার জন্য বাশ ম্যানুয়ালটি পড়ুন ।

নোট করুন যে ডিফল্ট সেটিংসের সাথে আমার অর্থ ব্যাশ থেকে ডিফল্ট সেটিংস। আপনার বিতরণ হতে পারে এমন একটি .bashrc(বা /etc/bash.bashrc) সরবরাহ করেছে যা এই আচরণটি পরিবর্তন করে।

শেল বিকল্পটি সক্ষম করে histappendআপনি বাশকে ইতিহাস ফাইলটি ওভার রাইটিংয়ের পরিবর্তে সংযুক্ত করতে বলতে পারেন। আপনি histappendকমান্ডটি ব্যবহার করে সক্ষম করতে পারেন shopt -s histappend। এই বিকল্পটি সর্বদা সক্ষম করার জন্য আপনাকে কমান্ডটি আপনার .bashrc(বা অন্যান্য আরম্ভের ফাইলটিতে) রাখতে হবে। বাশ ম্যানুয়ালটিতেshopt কমান্ডটি সম্পর্কে আরও পড়ুন

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

বিল্টিন কমান্ডটি ব্যবহার করে historyআপনি স্পষ্টভাবে বাশাকে ফাইল থেকে মেমরিতে ইতিহাস পড়তে বা মেমরি থেকে ফাইল লিখতে বলতে পারেন। উদাহরণস্বরূপ: history -rফাইলটির বিষয়বস্তু পড়বে এবং এটিকে স্মৃতিতে ইতিহাসে যুক্ত করবে। history -wপূর্ববর্তী বিষয়বস্তু ওভাররাইট করে মেমরি থেকে ফাইল পর্যন্ত বর্তমান ইতিহাস লিখবে। মূলত এটি শাটডাউনের সময় ঘটে। বাশ ম্যানুয়ালটিতেhistory কমান্ডটি সম্পর্কে আরও পড়ুন

সম্পূর্ণতার জন্য এখানে অভ্যন্তরীণ ভেরিয়েবলগুলির একটি তালিকা যা ইতিহাসের আচরণটি পরিবর্তন করে:

  • HISTFILE: ফাইলটি পড়ুন এবং ইতিহাস লিখবেন।
  • HISTFILESIZE: ইতিহাসের ফাইলের জন্য সর্বাধিক লাইন গণনা।
  • HISTSIZE: স্মৃতিতে ইতিহাসের জন্য সর্বাধিক লাইন গণনা।
  • HISTCONTROL, HISTIGNORE, HISTTIMEFORMAT: এই আলোচনার জন্য প্রাসঙ্গিক নয়। বিশদ জন্য ব্যাশ ম্যানুয়াল পড়ুন ।

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

লাইফসাইকেল পয়েন্ট (3) সঠিক নয়। দেখে মনে হচ্ছে কেবল প্রথম বাশ সেশনটি কখনও ইতিহাসের ফাইলে লিখবে। পরীক্ষা: ক্রম 2 সেশন খুলুন- ক, খ। 'ইকো হ্যালো' । তারপরে খ-এ প্রস্থান করুন । তারপরে একটি নতুন সেশন খুলুন । এই অধিবেশনটির ইতিহাসে ইকো হ্যালো থাকবে না।
ব্যবহারকারী 606723

@ অ্যালেক্সজিটেলম্যান: যদি কোনও বাশ প্রক্রিয়াটি মারা যায় তবে ইতিহাসের ফাইলটি ওভাররাইট করার সুযোগ থাকবে না। এবং হ্যাঁ, শেষ বন্ধ অধিবেশনটির ইতিহাসটি ইতিহাসের ফাইলে থাকবে।
লেসমানা

@ ব্যবহারকারী 606723: পয়েন্ট 3 সঠিক। বাশ ম্যানুয়াল পড়ুন। একটি ন্যূনতম .bashrcফাইল ব্যবহার করে আবার পরীক্ষা করুন। মনে রাখবেন যে আপনার বিতরণটি এতে কিছু সেটিংস পরিবর্তন করেছে /etc/bash.bashrc। শেল বিকল্পের জন্য বিশেষভাবে পরীক্ষা করুন histappend
লেসমানা

2

http://www.gnu.org/software/bash/manual/bashref.html#Using-History-Interactively

আপনি যে কোনও টার্মিনালের সাথে ইতিহাস ফাইলটি কীভাবে লিখিত হয় তা হেরফের করতে পারবেন, যেমন, আপনি ইতিহাস সংরক্ষণ করতে চান এমন টার্মিনালে "ইতিহাস -a" বা "ইতিহাস -w" চালনা করুন এবং তারপরে "ইতিহাস -r" অন্যান্য টার্মিনাল। আপনি যা করতে চান তার উপর নির্ভর করে।


0

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

একই সময়ে একাধিক সেশন খোলার সময়, একটি সেশনে টাইপ করা কমান্ডগুলি উভয় সক্রিয় থাকাকালীন অন্যটিতে দেখা যায় না। যাইহোক, আপনি যখন আপনার সেশনটি পুনরায় খোলার শেষ করবেন তখন আপনি এই আদেশগুলি দেখতে পাবেন।


এটি এমন আচরণ নয় যা আমি অভিজ্ঞ হয়েছি। আমি এখানে একটি ssh অধিবেশন খোলার সময়, একটি কমান্ড করি এবং একটি চমত্কার প্রস্থান করার জন্য দ্রুত পরীক্ষা করে এটি নিশ্চিত করতে পারি। এই ক্ষেত্রে, আমার আর আগের সক্রিয় ssh সেশন ছিল। এই পূর্ব-বিদ্যমান বাশ সেশনে, আমি .বাশ_তিহাসিটি পরীক্ষা করে দেখি এবং রেকর্ডকৃত কিছুই খুঁজে পাই না। আমি সম্ভবত এটি খুঁজে পেয়েছি যে প্রথম বাশ সেশনটি কেবলমাত্র চলমান .Bash_history এ রেকর্ডিং শেষ করে।
ব্যবহারকারী 606723

আপনার সেশনটি বাতিল করা বর্তমানে চলমান সেশনগুলিকে প্রভাবিত করবে না, তবে এটি নতুন সেশনে প্রভাব ফেলবে!
খালেদ

যদি এটি এসএসএইচ নয় তবে জিনোম টার্মিনাল উইন্ডো যা আমি ইউআইয়ের মাধ্যমে বন্ধ করি?
অ্যালেক্স গিটেলম্যান 19

এটি যাচাই করা দরকার। বর্তমানে, আমার কোনও জিনোম টার্মিনালে অ্যাক্সেস নেই!
খালেদ

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