প্রতি কার্যকারী ডিরেক্টরি ইতিহাস রাখছেন (শেল সেশন প্রতি সিএফ।)


11

কোনও আধুনিক শেলটির ইতিহাস বৈশিষ্ট্যটি কোনও পথকে স্কোপ করার কোনও উপায় আছে কি?

আমার কার্যনির্বাহী প্রসঙ্গগুলি ফাইল সিস্টেমে পাথ হিসাবে বিভক্ত হয়ে গেছে এবং শেল ক্রিয়াকলাপের ধরণ যেমন বারবার জারি করা আদেশগুলি প্রতিটি 'প্রকল্পের' থেকে আলাদা হতে থাকে। যদি আমি বর্তমান পথ (বা উপ-পাথ) থেকে জারি করা আদেশগুলিতে ইতিহাস বৈশিষ্ট্যটি স্কোপ করতে পারি তবে এটি দুর্দান্ত।

উত্তর:


5

সহ zsh, আপনি করতে পারেন:

mkdir -p ~/.zsh/dirhist

এবং আপনার ~ / .zshrc এ যুক্ত করুন:

HISTSIZE=1000
SAVEHIST=10000
setopt HIST_SAVE_NO_DUPS INC_APPEND_HISTORY
HISTFILE=~/.zsh/dirhist/${PWD//\//@}
chpwd() {
  [[ $PWD = $OLDPWD ]] || fc -Pp ~/.zsh/dirhist/${PWD//\//@}
}

chpwd()যখনই বর্তমান ডিরেক্টরি পরিবর্তন হয় তাকে বলা হয়। সেখানে, আমরা ইতিহাস ফাইলটি এমন কিছুতে পুনরায় সেট করেছিলাম ~/.zsh/dirhist/@foo@barযখন আপনি cdযাবেন /foo/bar


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

10

কোনও ঝরঝরে উত্তর নয় বরং বিকল্প হিসাবে যদি আপনি bashনিজের শেল হিসাবে ব্যবহার করছেন : আপনি নিজের কোনও এলিয়াস তৈরি করতে পারেন .bashrc

এই ক্ষেত্রে:

alias a='cd /tmp/A ; history -w ; history -c ; export HISTFILE=/home/user/.a_history ; history -r $HISTFILE'
alias b='cd /tmp/B ; history -w ; history -c ; export HISTFILE=/home/user/.b_history ; history -r $HISTFILE'

তারপরে, আপনি টাইপ করুন a:

  1. আপনি আপনার প্রকল্প ডিরেক্টরিতে সরানো হবে
  2. বর্তমান ইতিহাস সংরক্ষণ করা হবে ( history -w)
  3. তারপরে স্মৃতিতে রাখা ইতিহাস পুনরায় সেট করা হবে ( history -c)
  4. প্রকল্প ইতিহাস ফাইল সেট করা হবে /home/user/.a_historyএবং পড়বে ( history -r)

আমি বুঝতে পারি যে আমার প্রশ্নটি একটি ইচ্ছা / প্রয়োজনীয়তা বাদ দিয়েছে, অনুপস্থিত বিশদটির জন্য দুঃখিত। যথা: আমি বিকল্প / ফাংশন ব্যবহারের কথা মনে না করাই পছন্দ করব; অর্থাত্ স্কোলিংটি আমি শেলের সাথে সাধারণত যেভাবে যোগাযোগ করি তার একটি অ্যাড-অন হিসাবে কাজ করা উচিত।
সোহোকোক

রফতানি করবেন না HISTFILE। এটি অন্যান্য প্রোগ্রামগুলিতে রফতান করার কোনও কারণ নেই এবং inte / .bashrc প্রতিটি ইন্টারেক্টিভ বাশ প্রক্রিয়াটির জন্যই কার্যকর করা হয়, সুতরাং এটি সেট করার জন্য আপনার কোড যেভাবেই হোক প্রতিটি বাশে চালানো হবে। সাধারণভাবে, যদি শেল-সংজ্ঞায়িত ভেরিয়েবল ডিফল্টরূপে রফতানি না হয় তবে আপনার এটি খুব কমই রফতানি করা উচিত।
ক্রিস পেজ

1

আপনি যদি জেডএসএইচ ব্যবহার করে থাকেন তবে এটি পরিচালনা করার জন্য আমি সম্প্রতি লিখেছি এই ছোট প্লাগইনটি একবার দেখুন:

https://github.com/ericfreese/zsh-cwd-history

এটি HISTFILEকমান্ডগুলি কার্যকর করে এমন প্রতিটি ডিরেক্টরিের জন্য পৃথক সংরক্ষণ করে এবং আপনি ডিরেক্টরি পরিবর্তন করার সময় এর chpwdমধ্যে স্যুইচ করার জন্য একটি হুক যুক্ত করে HISTFILE

এটি একটি জেল উইজেটও সরবরাহ করে যা আপনি একটি কীপ্রেসের সাথে আবদ্ধ করতে পারেন যা HISTFILEআপনার মূল "গ্লোবাল" HISTFILEএবং HISTFILEআপনার বর্তমান কার্যকরী ডিরেক্টরিটির মধ্যে টগল করবে ।

এটি মূলত জিম হেসটারের প্রতি ডিরেক্টরি-ইতিহাসের প্লাগইনের উপর ভিত্তি করে তৈরি হয়েছিল , তবে সেই প্লাগইনটি নিয়ে বেশ কয়েকটি সমস্যা সমাধানের জন্য গ্রাউন্ড থেকে পুনরায় লেখা হয়েছিল।


কেবলমাত্র লিঙ্কের উত্তরগুলি এখানে নিরুৎসাহিত করা হয়েছে, দয়া করে এটি কীভাবে / কীভাবে কাজ করে তার কিছু ব্যাখ্যা যুক্ত করুন।

0

আমি একটি জেডএসএইচ প্লাগইন লিখেছিলাম যা আপনি যা চান তা করে: https://github.com/tymm/zsh-directory-history

অন্যান্য সমাধানগুলির বিপরীতে আমার প্লাগইন স্বয়ংক্রিয়ভাবে বৈশ্বিক ইতিহাসে ফিরে আসে। এর অর্থ হল আপনাকে ডিরেক্টরি ইতিহাস এবং বৈশ্বিক ইতিহাসের মধ্যে স্যুইচ করতে হবে না।

তবে অন্যান্য সমাধানগুলি আমার ধারণা কম বেশি হালকা।

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