উবুন্টুতে "কমান্ড খুঁজে পাওয়া যায়নি" হ্যান্ডলারটি


9

কমান্ড পাওয়া যায়নি বলে আমি হ্যান্ডলারের মধ্যে ookুকতে চাই

wim@SDFA100461C:~$ thing
No command 'thing' found, did you mean:
 Command 'tping' from package 'lam-runtime' (universe)
 Command 'thin' from package 'thin' (universe)
thing: command not found

আমি নিজের স্ক্রিপ্ট দিয়ে এই আচরণটি ওভাররাইড করতে চাই।

বিশেষত, আমি কমান্ডটি আউটপুটে উপস্থিত রয়েছে কিনা তা যাচাই করতে চাই lsvirtualenv -bএবং যদি তাই হয় তবে আমি সেই ভার্চুয়ালেনভকে সক্রিয় করতে চাই।

আমি কোথায় হ্যাকিং শুরু করব?


1
এটি সাহায্য করতে পারে: Askubuntu.com/a/73282/10127
গ্লেন জ্যাকম্যান

উত্তর:


8

সাধারণভাবে

লিনাক্স জার্নাল একটি প্রশংসনীয় ভাল নিবন্ধ রয়েছে:

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

... PATH- র ডিরেক্টরিগুলির সম্পূর্ণ অনুসন্ধান কেবল তখনই করা হয় যখন হ্যাশ সারণীতে কমান্ডটি পাওয়া যায় না। যদি অনুসন্ধানটি ব্যর্থ হয়, শেলটি কমান্ড_ন_ফাউন্ড_হ্যান্ডেল নামের একটি সংজ্ঞায়িত শেল ফাংশন অনুসন্ধান করে। যদি সেই ফাংশনটি বিদ্যমান থাকে তবে এটি মূল কমান্ড এবং মূল কমান্ডের যুক্তিগুলিকে তার আর্গুমেন্ট হিসাবে ডাকা হয় এবং ফাংশনের প্রস্থান স্থিতি শেলের প্রস্থান স্থিতিতে পরিণত হয়। যদি সেই ফাংশনটি সংজ্ঞায়িত না করা হয়, শেলটি একটি ত্রুটি বার্তা প্রিন্ট করে এবং 127 এর প্রস্থান স্থিতি ফেরত দেয়।

এবং

/ ইত্যাদিতে একটি দ্রুত গ্রেপ আবিষ্কার করেছিল যেখানে এটি ঘটছে। ফাংশনটি নিজেই / etc / bash_command_not_found এ থাকে এবং সেই ফাংশনটি /etc/bash.bashrc এর মাধ্যমে আপনার বাশ সেশনে অন্তর্ভুক্ত হয় (যদি তা উপস্থিত থাকে)।

উবুন্টু 14.04

গবেষণামূলক প্রমাণগুলি বোঝায় যে একটি উবুন্টু 14.04 ইনস্টলেশন-এ, ফাইল / ইত্যাদি / বাশ_কম্যান্ড_ন_ফাউন্ডের অস্তিত্ব নেই, তবে সঠিক ফাইলটি একটি পাইথন স্ক্রিপ্ট, / usr / lib / কমান্ড-না-পাওয়া যায়


1
এটি আমাকে সঠিক পথে সেট করেছে, তবে আসল প্রোগ্রামটি ছিল অজগর স্ক্রিপ্টে /usr/lib/command-not-found। আমার উবুন্টু 14.04 ইনস্টলেশনটিতে, ফাইলটি /etc/bash_command_not_foundবিদ্যমান নেই।
Wim

ধন্যবাদ, আমি ভবিষ্যতের দর্শকদের জন্য আমার জবাবটিতে এটি যোগ করেছি
অ্যান্ড্রু স্টাবস

1

কারণ bash, এর আচরণটি শেল ফাংশন দ্বারা পরিচালিত হয় command_not_found_handle(দেখুন man bash, COMMAND এক্সিকিউশনের অধীনে)।

সেই ফাংশনটির দ্বারা আচরণটি কী সংজ্ঞায়িত হয়েছে তা দেখতে আপনি ইস্যু করতে পারেন:

declare -p -f command_not_found_handle

command_not_found_handleফাংশনটিকে নতুন করে সংজ্ঞায়িত করে আপনি কোন প্রোগ্রামটি ব্যবহার করছেন তা পরিবর্তন করতে পারেন ।

উবুন্টু ১৪.০৪ এলটিএস-তে, মনে হয় যে ডিফল্ট আচরণটি সরাসরি এতে সংজ্ঞায়িত হয় /etc/bash.bashrc:

# if the command-not-found package is installed, use it
if [ -x /usr/lib/command-not-found -o -x /usr/share/command-not-found/command-not-found ]; then
    function command_not_found_handle {
            # check because c-n-f could've been removed in the meantime
            if [ -x /usr/lib/command-not-found ]; then
               /usr/lib/command-not-found -- "$1"
               return $?
            elif [ -x /usr/share/command-not-found/command-not-found ]; then
               /usr/share/command-not-found/command-not-found -- "$1"
               return $?
            else
               printf "%s: command not found\n" "$1" >&2
               return 127
            fi
    }
fi
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.