"আরএম হ্যাশ করা" এর অর্থ কী?


58

আমি http://mywiki.wooledge.org/BashGuide/CommandsAndAggments এর মধ্য দিয়ে যাচ্ছি এবং এটি পেরিয়ে এসেছি:

$ type rm
rm is hashed (/bin/rm)
$ type cd
cd is a shell builtin

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

উত্তর:


59

এটি একটি পারফরম্যান্স জিনিস; প্রতিবার বাইনারিটির জন্য যখন এটি বলা হয় তখন পুরো পথটি অনুসন্ধান করার পরিবর্তে দ্রুত অনুসন্ধানের জন্য এটি একটি হ্যাশ টেবিলের মধ্যে রাখা হয়। সুতরাং ইতিমধ্যে এই হ্যাশ টেবিলের মধ্যে যে কোনও বাইনারি হ্যাশ করা হয়। আপনি বাইনারিগুলি ইতিমধ্যে হ্যাশ করার পরে যদি সেখান থেকে সরান তবে এটি তাদের পুরানো স্থানে কল করার চেষ্টা করবে।

এছাড়াও দেখুন help hashবা সেখানে অন্তর্নির্মিত কমান্ডগুলির আওতায় man bashঅনুসন্ধান করুন hash


15

অন্যরা যেমন উল্লেখ করেছে যে হ্যাশটি একটি সহযোগী অ্যারে (কী -> মান) যা বশ রক্ষণাবেক্ষণ করে যাতে কোনও কমান্ড কার্যকর করা হয়, বাশ প্রথমে এই হ্যাশটি অনুসন্ধান করে অনুসন্ধান করে যে ডিস্কে কমান্ডের অবস্থানটি ইতিমধ্যে পাওয়া গেছে $PATHএবং সেখানে সংরক্ষণ করা হয়েছে stored দ্রুত অনুসন্ধানের জন্য।

আপনি হ্যাশটি কমান্ডগুলির একটি তালিকা দিয়ে প্রিললোড করতে পারেন যা আপনি বাশকে যখন সন্ধান করা হয় তখন এটি সন্ধান করতে চান। এই পরিবর্তনশীল বলা হয় BASH_CMDS

ম্যান পৃষ্ঠা থেকে উদ্ধৃতি

   BASH_CMDS
          An  associative  array  variable  whose members correspond to the 
          internal hash table of commands as maintained by the hash builtin.
          Elements added to this array appear in the hash table; unsetting 
          array elements cause commands to be removed from the hash table.

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

উদ্ধৃতাংশ

   If the name is neither a shell function nor a builtin, and contains no 
   slashes, bash searches each element of the PATH for a directory con
   taining an executable file by that name.  Bash uses a hash table to 
   remember the full pathnames of executable files (see hash  under  SHELL
   BUILTIN COMMANDS below).  A full search of the directories in PATH is 
   performed only if the command is not found in the hash table.  If the
   search is unsuccessful, the shell searches for a defined shell function 
   named command_not_found_handle.  If that  function  exists,  it  is
   invoked  with  the  original command and the original command's arguments 
   as its arguments, and the function's exit status becomes the exit
   status of the shell.  If that function is not defined, the shell prints 
   an error message and returns an exit status of 127.

আপনার হ্যাশটিতে বর্তমানে কী রয়েছে তা -lস্যুইচটি ব্যবহার করে আপনি জানতে পারবেন ।

উদাহরণ

$ hash -l
builtin hash -p /usr/bin/rm rm
builtin hash -p /usr/bin/sudo sudo
builtin hash -p /usr/bin/man man
builtin hash -p /usr/bin/ls ls

খুব সহায়ক আপনাকে ধন্যবাদ। আমি যখন কোনও স্ক্রিপ্টে কাজ করছি তখন আমি দেখতে পেয়েছি যে এই হ্যাশটি জিনিসটি পেয়ে যায়। এটি নিষ্ক্রিয় বা সাফ করার কোনও উপায় আছে?
কডেনিনজা

10

hash অন্তর্নির্মিত বাশ শেল যা কমান্ডগুলির জন্য হ্যাশিং সরবরাহ করে।

hash [-lr] [-p filename] [-dt] [name]

সোজা ঘোড়া মুখ থেকে:

help hash

মনে রাখবেন বা প্রোগ্রামের অবস্থানগুলি প্রদর্শন করুন।

info Bash Ll শেল বিল্টিন কমান্ডস → বোর্ন শেল বিল্টিনস

NAME টি আর্গুমেন্ট হিসাবে নির্দিষ্ট কমান্ডের পুরো পথের নামগুলি মনে রাখবেন, সুতরাং পরবর্তী অনুরোধগুলির জন্য তাদের অনুসন্ধান করার দরকার নেই। কমান্ডগুলি তালিকাভুক্ত ডিরেক্টরিগুলির মাধ্যমে অনুসন্ধান করে খুঁজে পাওয়া যায় $PATH-pবিকল্প পথ খোঁজা বাধা, ও ফাইলের নাম NAME এর অবস্থান হিসাবে ব্যবহার করা হয়। -rবিকল্প সব মনে পড়ল অবস্থানে ভুলে যেতে শেল ঘটায়। -dবিকল্প প্রতিটি NAME এর স্মরণ অবস্থান ভুলে যেতে শেল ঘটায়। যদি -tবিকল্প সরবরাহ করা হয় তবে প্রতিটি NAME এর সাথে সম্পর্কিত এমন পুরো পথের নামটি মুদ্রিত হবে। যদি NAME এর সাথে একাধিক NAME টি যুক্তি সরবরাহ করা হয় -tতবে হ্যাশ পূর্ণ পথের নাম আগে মুদ্রিত হবে। -lবিকল্প আউটপুট বিন্যাসে ইনপুট হিসাবে পুনঃব্যবহৃত করা যেতে পারে প্রদর্শিত হবে কারণ। যদি কোন যুক্তি দেওয়া হয় না, বা শুধুমাত্র যদি-lসরবরাহ করা হয়, মনে রাখা কমান্ড সম্পর্কে তথ্য মুদ্রিত হয়। NAME পাওয়া না গেলে বা অবৈধ বিকল্প সরবরাহ না করা অবধি রিটার্নের অবস্থা শূন্য।

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