একাধিক টার্মিনাল সহ ইতিহাস পরিচালনা করছে


110

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

উদাহরণস্বরূপ, আমার প্রম্পটটি বর্তমান বাশ ইতিহাসের লাইনটি দেখায় ( \!) এবং যদি আমি 3 টি বিভক্ত টার্মিনাল উইন্ডো সহ টার্মিনেটর চালু করি তবে আমি সমস্ত টার্মিনালগুলিতে একই ইতিহাসের লাইন (আসুন 100 বলি) পাই। কোন ইতিহাস রক্ষা হবে?

টার্মিনেটর ব্যবহারের পরে জিনোম টার্মিনাল চালু করে আমি টার্মিনেটরে আগে জারি করা সমস্ত কমান্ড নির্বিশেষে শুরুতে 100 লাইন পাই


উত্তর:


107

বাশ সেশনটি সংরক্ষিত হয়েছে এটি সর্বশেষতম বন্ধ হওয়া টার্মিনালের জন্য। আপনি যদি প্রতিটি সেশনের জন্য কমান্ডগুলি সংরক্ষণ করতে চান তবে আপনি এখানে বর্ণিত কৌশলটি ব্যবহার করতে পারেন ।

export PROMPT_COMMAND='history -a'

ম্যানপেজটি উদ্ধৃত করার জন্য: "যদি সেট করা থাকে তবে প্রতিটি প্রাথমিক প্রম্পট দেওয়ার আগে মানটি একটি আদেশ হিসাবে কার্যকর করা হয়।"

সুতরাং প্রতিবার আমার কমান্ডটি শেষ ~/.bash_historyহয়ে গেলে, প্রম্পটটি (কেবলমাত্র PS1) আবার প্রদর্শিত করার আগে এটি লিখিত ইতিহাসের আইটেমটিকে যুক্ত করে ।

সুতরাং এই লাইনটি স্থাপনের পরে /etc/bash.bashrcআমাকে নিজেকে পুনর্বহাল করা চাকার সন্ধান করতে হবে না বা মূল্যবান সেকেন্ডগুলি পুনরায় টাইপ করার জিনিসটি হারাতে হবে না কারণ আমি আমার টার্মিনালগুলি নিয়ে অলস ছিল।

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

আরো দেখুন:


এটি আলাদা টিটিএল জন্য আলাদাভাবে সংরক্ষণ করা হয় না ??
ভিনিত মেনন

চমৎকার। ব্যাখ্যা এবং সমাধানের জন্য ধন্যবাদ। আমি চেষ্টা export PROMPT_COMMAND='history -a; history -r'করেছিলাম এবং টার্মিনালে আমি কিছু অদ্ভুত ইতিহাসের লাইন নম্বর পেয়েছি - কিছু কমান্ড ইতিহাসের লাইনের সংখ্যা 1 পরে পরিবর্তে 2000 দ্বারা লাফ দেয়, যা আশ্চর্যজনক তবে এটি যেমনটি আচরণ করে - সমস্ত টার্মিনালের ইতিহাস সংরক্ষণ করা হয়।
zetah

@VineetMenon অধিক বিবরণের জন্য দেখুন এখানে । আকর্ষণীয় অংশ: শেলটি শুরু হয়ে গেলে, ইতিহাসটি হিস্টফিল ভেরিয়েবল (ডিফল্ট `~ / .bash_history ') নামক ফাইল থেকে শুরু করা হয়। [...] যখন কোনও ইন্টারেক্টিভ শেলটি প্রস্থান করে, ইতিহাসের তালিকা থেকে শেষ $ HISSIZE রেখাগুলি F HISTFILE নামক ফাইলটিতে অনুলিপি করা হয়।
jcollado

এই ওয়েবসাইট ডাউন বলে মনে হয় northernmost.org/blog/flush-bash_history-after-each-command
Shubham


32

একাধিক পাঠের পরে man bash, আমি প্রতিটি শেলের জন্য পৃথক ইতিহাস ফাইলগুলি ব্যবহার করি। আমি mkdir -m 0700 ~/.historyতখন যুক্ত করেছি

[[ -d ~/.history ]] || mkdir --mode=0700 ~/.history
[[ -d ~/.history ]] && chmod 0700 ~/.history
HISTFILE=~/.history/history.$(date +%y%b%d-%H%M%S).$$
# close any old history file by zeroing HISTFILESIZE  
HISTFILESIZE=0  
# then set HISTFILESIZE to a large value
HISTFILESIZE=4096  
HISTSIZE=4096  

আমার ~/.bashrc। প্রতিবার এবং পরে, আমি মনে করি du -sk .historyএবং এটি পরিষ্কার করে। আমি টাইপ করা প্রতিটি কমান্ডটি আমার জন্য সংরক্ষণ করা ভাল।

আমি শুধু উপরের দিকে কী করছি তা দেখতে উপরেরটি ব্যবহার করেছি:
cut -f1 "-d " .history/* | sort | uniq -c |sort -n -r |less
বা
cut -f1-2 "-d " .history/* | sort | uniq -c |sort -n -r |less
(1 ম যুক্তি যেমন sudo mountশৃঙ্খলা শৃঙ্খলে অন্তর্ভুক্ত করতে )।


3
আপনি HISTFILESIZEদুবার বরাদ্দ করেন কেন ?
ড্যানিয়েল

2
HISTFILESIZE 0 এ সেট করে আমি ইতিহাসের বাফারটি সাফ করে দিয়ে ইতিহাস সংরক্ষণের পদ্ধতিটি পুনরায় সেট করি। তারপরে, আমি যে আকারটি পছন্দ করতে চাই তা সত্যই সেট করে রেখেছি এবং ইতিহাসের ইতিহাস সংরক্ষণ করতে শুরু করি। এর ইতিহাস বিভাগটি দেখুন man bash
ওয়ালটিনেটর

1
Ctrl+rআবার কাজ করার জন্য ইতিহাসের ফাইলগুলিকে মার্জ করার কোনও উপায় আছে ?
n611x007

3
এটি একটি নতুন প্রশ্ন হওয়া উচিত, তবে আমি এটি একটি ভাল ধারণা বলে মনে করি না। আমি পরিবর্তে egrep 'whatever' .history/*(বা cat .history/* | egrep 'whatever') ব্যবহার করি এবং পৃথক সেশনের ইতিহাস অনুসন্ধান করতে Ctrl-r ব্যবহার করি। man bash-builtinsইতিহাস কমান্ড সম্পর্কে পড়ুন । আমার sort .history/* | uniq -c | sort -n | wc -lশো 16033 অনন্য কমান্ডগুলি cut '-d ' -f1 .history/* | sort | uniq -c | sort -nদেখায়, 2004 অনন্য কমান্ডগুলি দেখায়, বেশিরভাগ টাইপস। বাশের "ইতিহাস তালিকায়" সমস্ত লোড করা কোনও উপকারে আসেনি।
ওয়ালটিনেটর

@ ওয়ালটিনেটর - আমি জানি এটি একটি পুরানো মন্তব্য, তবে আপনি কি পরিবেশগত পরিবর্তনশীল নির্ধারণ করে কোনওভাবে তাত্ক্ষণিক পদক্ষেপের সূত্রপাত করছেন? আপনি কোন স্থানীয় শেলটিতে 0 টি HISFILESIZE এর মান নির্ধারণ করেছেন এবং তারপরে তাত্ক্ষণিক 4096-এ পরিবর্তিত হবে তা কোন প্রক্রিয়াটি গ্রহণ করবে? এটি কি কিছু পরিবর্তনশীল নাম বাশের হ্যান্ডলিং সম্পর্কে বিনা প্রতিবন্ধী কিছু?
২৪:৪০

8

historyসমস্ত টার্মিনাল থেকে প্রদর্শন করতে :

যোগ export PROMPT_COMMAND='history -a; history -r'আপনার .bashrc ফাইলের।

সূত্র: http://nuramost.org/blog/flush-bash_history- after-each-command



3
আমি বলব যে এটি ব্যবহারের কয়েক মাস পরে আমি অবশেষে ঠিক সম্প্রতি এটি মন্তব্য করেছি। এটি বিটারউইট কারণ আমি সর্বদা শেষ 100 কমান্ডগুলি সন্ধান করতে চাই না কেবল টিমাক্স ফলকে চালিত করতে চালিত করতে আমার মাঝে মাঝে একটি ডেডিকেটেড লগ কমান্ড থাকতে পারে যাতে আমাকে পুনরায় চালু করতে হবে।
এলিজা লিন

মাছের শেলটি দেয় একটি দুর্দান্ত সমাধান হ'ল একটি history --merge। আমি এটি এক বছর বা তার বেশি সময় ধরে ব্যবহার করছি এবং এটি সমস্যাটি সমাধান করে। যখন আমি অন্যান্য সেশনগুলির থেকে সাম্প্রতিকতম ইতিহাস চাই, আমি কেবল সেই আদেশটি চালাই এবং তা তাত্ক্ষণিকভাবে আমার কাছে উপলব্ধ available
এলিজা লিন 21

রফতানি প্রয়োজন হয় না।
সীমাবদ্ধ প্রায়শ্চিত্ত

6

আরও একটি বিকল্পের জন্য " দৃash় ইতিহাস অব্যাহত রাখা " দেখুন । কোনও টার্মিনালে টাইপ করা সমস্ত কমান্ডকে "ধ্রুবক ইতিহাস" ফাইলে পাঠানোর জন্য আপনার প্রম্পটটি টানতে পারে (নিয়মিতভাবে যা করা হয় তার পাশাপাশি .history)।


1
আমি সন্নিবেশিত $$ লাইন করতে echo $$ $date_part "$command_part" >> ~/.persistent_historyএটি তাদের ব্যাশ প্রক্রিয়ার PIDs সঙ্গে এন্ট্রি উপসর্গ, যাতে আমরা একাধিক ইতিহাস ছাড়ান পারবেন না।
এভেজেনি সার্জিভ

বিকল্প ইতিহাস কি সিটিআরএল-আর ইতিহাস অনুসন্ধানের সাথে কাজ করার জন্য তৈরি করা যেতে পারে?
সর্বোচ্চ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.