পথে বাশের এক্সিকিউটেবলের ক্যাশে অক্ষম করুন


12

মনে রাখবেন যে, এই হল না সদৃশ। আমি ক্যাশে নিষ্ক্রিয় করার বিষয়ে জিজ্ঞাসা করছি , এটি সাফ না করে। আপনার যদি সাফ করার জন্য ক্যাশে থাকে তবে তা অবশ্যই অক্ষম নয়।

বিরল ইভেন্টগুলিতে আমি বাশের জিনিসগুলিকে ক্যাশে পেয়েছি এমন জিনিসগুলি লক্ষ্য করেছি, এটি সহায়ক হিসাবে নয়, কারণ এটি রক্তাক্ত বিরক্তিকর। একটি উদাহরণ:

~ dc$ export PATH=$HOME/bin:$PATH
~ dc$ cat bin/which
#!/bin/bash
echo "my which"
~ dc$ which
my which
~ dc$ rm bin/which
~ dc$ which which
-bash: /Users/dc/bin/which: No such file or directory

অন্য শেল ...

~ dc$ which which
/usr/bin/which

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

এবং আমি এটি অক্ষম করার কোনও উপায়ও খুঁজে পাচ্ছি না। কোন পয়েন্টার?


1
এমনকি ডেস্কটপ মেশিনের সাধারণ ক্ষেত্রেও সুবিধাগুলি লক্ষণীয়, যদি আপনার এত বেশি র্যাম না /usr/binথাকে যা সম্পূর্ণরূপে ক্যাশে থাকে।
গিলস 'অশুভ হওয়া বন্ধ করুন'

1
দুঃখিত, দুঃখিত। আমি এই প্রশ্নটিকে সদৃশ হিসাবে চিহ্নিত করেছি। set +hহ্যাশিং অক্ষম করতে ব্যবহার করুন ।
এভিজেনি ভেরেশচাগিন

নিক্সোসে, এটি তার ব্যাশে হ্যাশ অক্ষম করেছে। আমি মনে করি, নিক্সোসের কাজ করার কারণে এটি একটি ভাল কারণ। তবে নিক্সসের জন্য এটি সত্যই বাধ্যতামূলক কিনা তা আমি নিশ্চিত নই। আমি কেবলই বলছি, ব্যাশে একটি হ্যাশ নির্দিষ্ট পরিস্থিতিতে সমস্যা আনতে পারে।
টাইপলজিক

উত্তর:


12

প্রম্পটটি আঁকার আগে আপনি কেবল হ্যাশ এক্সিকিউটেবলগুলি সাফ করতে পারেন:

PROMPT_COMMAND='hash -r'

থেকে help hash:

hash: hash [-lr] [-p pathname] [-dt] [name ...]
Remember or display program locations.

Determine and remember the full pathname of each command NAME.  If
no arguments are given, information about remembered commands is displayed.

Options:
  -d                forget the remembered location of each NAME
  -l                display in a format that may be reused as input
  -p pathname       use PATHNAME is the full pathname of NAME
  -r                forget all remembered locations
  -t                print the remembered location of each NAME, preceding
            each location with the corresponding NAME if multiple
            NAMEs are given
Arguments:
  NAME              Each NAME is searched for in $PATH and added to the list
            of remembered commands.

Exit Status:
Returns success unless NAME is not found or an invalid option is given.

1
সম্পর্কে আমার উত্তর দেখুনset +h
এভজেনি Vereshchagin

1
@ এভজেনিভেরেশচাগিন set +hআদর্শ নয়, যতগুলি ইউটিলিটি (যেমন রুবি রত্ন ইনস্টলেশন) কল করে সতর্কতার hashস্রোত তৈরি -bash: hash: hashing disabledকরে।
ডেভিড মোলস

আমি পাইথন ভ্যুচুয়ালেনভ অ্যাক্টিভেশনটিতে একই সতর্কতা বার্তাও দেখি। তবে আমি মনে করি, এটি নিরীহ।
টাইপলজিক

8

হ্যাশ টেবিলের কমান্ডের অস্তিত্ব না থাকলে আপনি বাশকে নতুন পথের সন্ধান করতে বাধ্য করতে পারেন।

shopt -s checkhash

বাশের ম্যানপেজ থেকে:

checkhash

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

উদাহরণ:

[blabla]$ PATH=$HOME/bin:$PATH
[blabla]$ hash -r
[blabla]$ cat bin/which
#!/bin/bash
echo "my which"
[blabla]$
[blabla]$ shopt -s checkhash
[blabla]$ which
my which
[blabla]$ mv bin/which bin/dis.which
[blabla]$ which which
/usr/bin/which
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.