তাত্ক্ষণিকভাবে .বাশ_তিহাসিকগুলিতে লেখা সম্ভব?


124

আমি প্রায়ই খোলা পার্কিং এবং টার্মিনাল প্রচুর [এই মুহুর্তে আমি 7 এই কর্মক্ষেত্র খোলা] এবং আমি প্রায়ই অনুসন্ধান historyসঙ্গে grepকমান্ড আমি শুধু সম্প্রতি লিখিত করেছেন সেগুলি খুঁজে পেতে, কিন্তু আমি টার্মিনাল অনুসরণপূর্বক চাই না এবং তারপর উপরে স্ক্রল এবং এর জন্য আরও অনুসন্ধান করা Sometimes কখনও কখনও 'প্রস্থান' না করেই আমার টার্মিনালগুলি বন্ধ হয়ে যায় এবং আমি যা লিখেছি তা সব হারিয়ে যায় [কখনও কখনও আমার হত্যা করা টার্মিনালে কিছু লেখা দরকার ছিল]।

সুতরাং এটি তৈরি করার কোনও উপায় কি প্রতিটি টার্মিনাল অবিলম্বে .bash_history এ লিখে? বা মিনিটে অন্তত একবার, বা এরকম কিছু?


2
সাধারণত আমি control-rএকটি ব্যাশের কমান্ড ইতিহাসে বিপরীত অনুসন্ধান করতে ব্যবহার করি । history | grepআপনার একটি রেজেক্স প্রয়োজন না হলে তার চেয়ে বেশি সুবিধাজনক ।
পিটার কর্ডেস

উত্তর:


92

রিয়েলটাইমের আপডেট বাশ ইতিহাসে বিশদ হিসাবে একটি সহজ সমাধান ।

এটি আদেশগুলিকে .bashrc কনফিগারেশনে রাখার জন্য বলেছে:

shopt -s histappend
PROMPT_COMMAND="history -a;$PROMPT_COMMAND"

প্রথম কমান্ড .historyফাইল সংযোজন ফাইল পরিবর্তন করে । এবং দ্বিতীয়টি history -aপ্রতিটি শেল প্রম্পটে চালানোর জন্য কমান্ডটি কনফিগার করে । -aঅবিলম্বে ইতিহাস ফাইলে বর্তমান / নতুন লাইন লিখেছে।

Zsh সম্পর্কিত:


1
ভাল এই ধরনের কাজ। আমি আরও কিছু পরীক্ষার চেষ্টা করেছি এবং মনে হচ্ছে এটি কেবল প্রথম কমান্ডেই কাজ করবে। এটি আপনার জন্য সঠিকভাবে কাজ করে?
ম্যাট

54

এটি আপনার মধ্যে রাখার চেষ্টা করুন .bashrc:

shopt -s histappend                      # append to history, don't overwrite it
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

ক্রেডিট এখানে: https://stackoverflow.com

history -cচলমান সেশনের ইতিহাস সাফ করে। এটি পরিমাণের দ্বারা ইতিহাসের কাউন্টারকে হ্রাস করবে $HISTSIZEhistory -rএর সামগ্রীগুলি পড়ুন $HISTFILEএবং সেগুলি বর্তমান চলমান সেশন ইতিহাসে সন্নিবেশ করান। এটি লাইনের পরিমাণের সাহায্যে ইতিহাসের কাউন্টারকে বাড়িয়ে তুলবে $HISTFILE

আমি মনে করি এর অর্থ হ'ল কমান্ডগুলি প্রায় অবিলম্বে উপলব্ধ (আপনার একটি টার্মিনাল রয়েছে, লিখতে হবে echo 1, দ্বিতীয় টার্মিনাল আছে echo 2, প্রথমে echo 3এবং দু'বার তীর টিপে চাপার পরে, আপনার echo 2পাওয়া উচিত You যা আছে তার অ্যাক্সেস পেতে আপনাকে অবশ্যই একটি নির্দিষ্ট টার্মিনালে একটি কমান্ড জারি করতে হবে) লেখা হয়েছে।


উজ্জ্বল! ধন্যবাদ। man history
ভাবছেন

10
@artfulrobot: এই আদেশটি bashঅন্তর্নির্মিত তাই এটিতে বর্ণিত man bash। আপনি ব্যবহার করতে পারেন help history
পাবউক

2
আমি আমার zsh এর মতো কাজ করার জন্য কনফিগার করেছি: প্রতিটি শেল তার OWN ইতিহাস (এবং তার আগে, সম্মিলিত ইতিহাস) ট্র্যাক করে এবং প্রতিটি কমান্ড সম্মিলিত ইতিহাসে যুক্ত হয়। এটি প্রতিটি শেলের প্রতিটি কমান্ডের জন্য সর্বদা ইতিহাস পুনরায় লোড করার চেয়ে আলাদা এবং ভাল , কারণ প্রতিটি শেল টার্মিনালের জন্য আমার আলাদা "কাজের থ্রেড" বা "কাজের" থাকে। আমি মনে করি যে এটির সাথে -rএবং -cকেবল বনামের মধ্যে পার্থক্য -a
স্টিভেন লু

তাহলে আপনি ঠিক কী ব্যবহার করছেন? history -c; history -r? আমি অনুমান করি এটি আপনার পক্ষে ভাল, আমার জন্য এটি কেবল কখনও কখনও ভাল I আমি একটি কাজ করার জন্য প্রায়শই বেশ কয়েকটি শাঁস ব্যবহার করি তাই আমি যতটা সম্ভব ইতিহাসকে একত্রিত করতে পছন্দ করি। আমি আসলে মনে করি যে কমান্ডটি শেষ হওয়ার পরেই ইতিহাসে লেখা হয়। সাধারণত, যখন আমি একটি হোস্টের জন্য ssh অধিবেশন শুরু করি এবং প্রথমটি চলমান অবস্থায় অন্য একটিটি খুলতে চাই, তখন আমি এটি পুনরায় টাইপ করতে হবে কারণ এটি এখনও ইতিহাসে লেখা হয়নি।
sup

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

38

আমার কাছে প্রায় 100000 এন্ট্রি সহ একটি বিশাল ইতিহাস ফাইল রয়েছে এবং যে রূপগুলি ইতিহাসের তালিকা সাফ করে এবং পুরো ইতিহাস ফাইলটি পড়ে (ব্যবহার করে history -cএবং history -r) প্রম্পটটি প্রদর্শিত হওয়ার আগে একটি লক্ষণীয় (সম্ভবত 0.2 সেকেন্ড) বিলম্ব প্রবর্তন করে। ব্যবহার history -nযাতে শুধুমাত্র নতুন লাইন ইতিহাস ফাইল থেকে পড়া হয় দ্রুততর:

shopt -s histappend
PROMPT_COMMAND='history -a;history -n'

PROMPT_COMMAND রফতানি করতে হবে না কারণ এটি শেল ভেরিয়েবল।


উজ্জ্বল! সংযোগটি নামার পরে আর কোনও ইতিহাস হারিয়ে যায় না!
টোবিয়া

এটা চমৎকার. ফাইলটিতে সংযোজন এবং ফাইল থেকে পড়া দ্বারা, এটি একাধিক টার্মিনাল জুড়ে ইতিহাস ভাগ করে নেবে।
উইসবাকি

3

অন্যান্য সমস্ত উত্তরের জন্য একটি নোট (যা মূলত একই জিনিস):

সেট PROMPT_COMMAND="history -a;$PROMPT_COMMAND"মধ্যে .bashrc(অথবা বন্ধুদের) যথেষ্ট।

এছাড়াও, আপনি history -aযখনই বর্তমান সেশনে ইতিহাস "স্ন্যাপশট" করতে চান ম্যানুয়ালি চালাতে পারেন।

কমান্ডটির shopt -s histappendপ্রয়োজন নেই কারণ history -aফাইলটিতে সর্বদা নতুন লাইন যুক্ত হয় এবং কখনই এটি ওভাররাইট হয় না। এছাড়াও, কমপক্ষে বাশ 4 হিসাবে, histappendডিফল্ট আচরণ।


আমার ম্যাক 10.13.6 এ দেখে মনে হয়েছিল এটি ছাড়া কাজ করে না shopt -s histappend। এছাড়াও নোট করুন আমি এটি আমার~/.bash_profile
ubershmekel

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