শেল জানেন এমন সমস্ত কমান্ডের তালিকা করুন


32

আমি আমার শেলটিতে কী টাইপ করতে পারি (যা হ'ল bash) যা স্বীকৃত সমস্ত আদেশের তালিকা তৈরি করবে?

এছাড়াও, এই শেল দ্বারা পৃথক হয়? বা সমস্ত শেলগুলির কেবল স্বীকৃত কমান্ডগুলির একটি "ডিরেক্টরি" রয়েছে?

দ্বিতীয়ত, ভিন্ন প্রশ্ন, তবে আমি কীভাবে এগুলির কোনওটিকে ওভাররাইড করতে পারি? অন্য কথায় আমি কীভাবে viewআমার উবুন্টু সিস্টেমে বিদ্যমানটিকে প্রতিস্থাপন করতে নিজের কমান্ড লিখতে পারি , যা কেবলমাত্র লোড হিসাবে দেখা যায় vim


5
প্রশ্ন একত্রিত করবেন না দয়া করে। প্রত্যেককে পৃথক প্রশ্ন হিসাবে পোস্ট করুন।
টেরডন

Unix.stackexchange.com/q/63073/135943 এর নিকট-সদৃশ (আমি উভয় দিকের সাথে সংযুক্ত করেছি।)
ওয়াইল্ডকার্ড

উত্তর:


61

তুমি ব্যবহার করতে পারcompgen

compgen -c # will list all the commands you could run.

অবগতির জন্য:

compgen -a # will list all the aliases you could run.
compgen -b # will list all the built-ins you could run.
compgen -k # will list all the keywords you could run.
compgen -A function # will list all the functions you could run.
compgen -A function -abck # will list all the above in one go.

4
নোটটিতে এমন compgen -cজিনিস অন্তর্ভুক্ত থাকবে {বা whileযা কমান্ড কঠোরভাবে বলছে না।
স্টাফেন চেজেলাস

13

একটি শেল চার ধরণের কমান্ড জানে।

  • উপাধি: এগুলি হ'ল কিছু বিকল্প সহ একটি আদেশের ডাক নাম। এগুলি শেলের প্রারম্ভিকরণ ফাইলে সংজ্ঞায়িত করা হয় (~/.bashrc ব্যাশের জন্য) ।
  • কার্যাদি: এগুলি একটি নাম দেওয়া শেল কোডের স্নিপেট। এলিয়াসগুলির মতো সেগুলি শেলের প্রারম্ভিককরণের ফাইলে সংজ্ঞায়িত করা হয়।
  • বিল্টিনস: শেলটি সংখ্যক অন্তর্নির্মিত কমান্ডের সাথে আসে। সর্বাধিক বিল্টিন শেল স্থিতি পরিচালনা করে ( cdবর্তমান ডিরেক্টরি পরিবর্তন করে,set বিকল্পসমূহ এবং অবস্থানগত পরামিতি exportপরিবর্তন করে, পরিবেশ পরিবর্তন করে ...)। বেশিরভাগ শেল বেশিরভাগ ক্ষেত্রে একই বিল্টিনগুলি সরবরাহ করে তবে প্রতিটি শেলের বেসিক সেটে কয়েকটি এক্সটেনশন রয়েছে।
  • বাহ্যিক আদেশ: তারা শেল থেকে স্বতন্ত্র। অন্যান্য প্রোগ্রামগুলির মতো, শেলটি এক্সিকিউটেবল অনুসন্ধানের পথে অনুসন্ধান করে বাহ্যিক প্রোগ্রামগুলি সম্পাদন করে । PATHএনভায়রনমেন্ট ভেরিয়েবল প্রোগ্রামের জন্য অনুসন্ধান করতে ডিরেক্টরি একটি কোলন বিচ্ছিন্ন তালিকা-ধারণ করে।

একই নামের সাথে একাধিক প্রকারের কমান্ড থাকলে, উপরের ক্রমের প্রথম ম্যাচটি কার্যকর হয় ¹

একটি নাম চলমান দ্বারা কমান্ডের প্রকারটি আপনি দেখতে পারেন type some_name

আপনি চালনা করে এলিয়াস তালিকা করতে পারেন alias কোনও যুক্তি ছাড়াই অন্তর্নির্মিত । ফাংশন বা বিল্টিনগুলি তালিকাভুক্ত করার কোনও উপায় নেই যা সমস্ত শেলগুলিতে কাজ করে। আপনি শেলের ডকুমেন্টেশনে বিল্টিনগুলির একটি তালিকা পেতে পারেন।

setব্যাশে , বিল্টিনগুলি তাদের সংজ্ঞা পাশাপাশি ভেরিয়েবলগুলির সাথে ফাংশন তালিকাভুক্ত করে। ব্যাশ, ksh বা zsh এ, typeset -fতাদের সংজ্ঞাগুলি সহ ফাংশন তালিকাভুক্ত করে। ব্যাশে, আপনি যে কোনও প্রকারের সমস্ত কমান্ডের নাম তালিকাভুক্ত করতে পারেন compgen -c। আপনি ব্যবহার করতে পারেন compgen -A alias, compgen -A builtin compgen -A functionএকটি নির্দিষ্ট ধরনের একটি তালিকা কমান্ড করতে। compgenসেই উপসর্গ দিয়ে শুরু হওয়া কমান্ডের তালিকা তৈরি করতে আপনি অতিরিক্ত স্ট্রিং পাস করতে পারেন ।

Zsh, আপনি সঙ্গে একটি প্রদত্ত ধরনের বর্তমানে উপলব্ধ কমান্ড তালিকাবদ্ধ করতে পারেন echo ${(k)aliases}, echo ${(k)functions}, echo ${(k)builtins}এবংecho ${(k)commands} (শুধুমাত্র যে গত এক তালিকা বহিরাগত কমান্ড)।

নিম্নলিখিত শেল-অগ্নিস্টিক স্নিপেট সমস্ত উপলব্ধ বাইরের প্রোগ্রামের তালিকা করে:

case "$PATH" in
  (*[!:]:) PATH="$PATH:" ;;
esac

set -f; IFS=:
for dir in $PATH; do
  set +f
  [ -z "$dir" ] && dir="."
  for file in "$dir"/*; do
    if [ -x "$file" ] && ! [ -d "$file" ]; then
      printf '%s = %s\n' "${file##*/}" "$file"
    fi
  done
done

বাশ: হ্যাশ কমান্ডে একটি প্রান্তের মামলা রয়েছে।

বাশ রেফারেন্স ম্যানুয়াল বলেছেন:

হ্যাশ টেবিলের মধ্যে কমান্ডটি পাওয়া না গেলেই $ PATH- র ডিরেক্টরিগুলির সম্পূর্ণ অনুসন্ধান করা হয়

চেষ্টা করুন:

set -h
mkdir ~/dir-for-wat-command
echo 'echo WAT!' >~/dir-for-wat-command/wat
chmod +x ~/dir-for-wat-command/wat
hash -p ~/dir-for-wat-command/wat wat
wat

PATHএনভায়রনমেন্ট ভেরিয়েবল ধারণ করে না ~/dir-for-wat-command, compgen -cপ্রদর্শন করা হয় না wat, কিন্তু আপনি চালাতে পারেন wat

আপনি যদি কোনও বিদ্যমান কমান্ডকে ছায়া দিতে চান তবে একটি নাম বা একটি ফাংশন নির্ধারণ করুন

¹ ব্যতিক্রম: কয়েক builtins (যাকে বলা হয় বিশেষ builtins ) একটি ফাংশন দ্বারা ছায়াবৃত্ত করা যাবে না - ব্যাশ এবং zsh তাদের ডিফল্ট মোড যদিও যে বিন্দুতে POSIX মেনে চলতে হবে না।


আরেকটি প্রান্তের ক্ষেত্রে হ'ল $PATHলাইক /bin:/usr/bin:(ট্রেলিং :) এর মান , যেখানে এটি বর্তমান ডিরেক্টরিতে এক্সিকিউটেবল ফাইলগুলি তালিকা করতে ব্যর্থ হবে।
স্টাফেন চেজেলাস

3

কমান্ডের তালিকায় দুটি সেট থাকে:

  1. শেলটি অন্তর্নির্মিত কমান্ডগুলি
  2. কমান্ডগুলি আপনার PATH

আপনি বিল্ট-ইনগুলি পরিবর্তন করতে পারবেন না, তবে পুরো পথের নামটি উল্লেখ করে আপনি শেলটি বিল্ট-ইন ব্যবহার থেকে আটকাতে পারবেন /bin/echo

আপনার কমান্ডগুলি হিসাবে PATH, আপনি এটি পরিবর্তন করতে পারেনPATHকমান্ড সন্ধানের জন্য ডিরেক্টরিগুলির একটি কোলন-বিচ্ছিন্ন তালিকা। প্রথম মিলিত ফাইলটি "বিজয়" পাওয়া গেছে।

export PATH=~/bin:${PATH}

(এই বাক্য cshগঠনটি উত্কীর্ণ শেলগুলির জন্য কাজ করে না , তবে আমি জানি যে সমস্ত অন্যান্য)।

যে রপ্তানির PATHসঙ্গে ~/binযেমন প্রথম এন্ট্রি বিদ্যমান বাকি দ্বারা অনুসরণ PATHএন্ট্রি। সুতরাং এখন আপনার শেলটি সিস্টেম সেট আপ directory calledবিন in your home directory for a command *first* before checking the standardপ্যাথ` পরীক্ষা করবে । আপনি সহজেই এর পরিবর্তে এটি ব্যবহার করে নতুন ডিরেক্টরিটি চেক করতে পারবেন:

export PATH=${PATH}:~/bin

করতে PATHভবিষ্যতে লগ-ইনের জন্য জিদ, একটি থেকে এটি যোগ .profileবা অন্যান্য শেল RC ফাইল।



1

আপনি যদি ট্যাব কীটি দু'বার চাপেন এবং তারপরে y, আপনি আপনার বর্তমান শেলটিতে সমস্ত উপলব্ধ কমান্ডের তালিকা পাবেন। দ্বিতীয় প্রশ্নের জন্য আমি মনে করি আপনার উপনাম: শেল ওরফে ব্যবহার করা উচিত ।


ওরফে সম্পর্কিত, এটি কি সিস্টেমের যে কোনও জায়গায় বলা হয় (উদাহরণস্বরূপ শেল স্ক্রিপ্ট থেকে) যখন একটি আদেশ একটি "অমান্যকর" দ্বারা) ওভাররাইড এবং আন-ওভাররাইডের একটি বোকা-প্রমাণ উপায়?
themirror

1
আপনি কোন শেল ব্যবহার করবেন? আমি আমার ব্যাশের সমস্ত কমান্ডের তালিকা করতে ডাবল ট্যাবটি পেতে পারি না।
টেরডন

আমি উবুন্টু 13.04 এ ব্যাশ ব্যবহার করি। কমপেজ নামক একটি কমান্ড রয়েছে যা ব্যাশে সমস্ত উপলভ্য কমান্ডের তালিকা পেতে ব্যবহার করা যেতে পারে।
coffeMug

@ ইটারডন আপনার কি বাশ সমাপ্তি ইনস্টল করা আছে?
coffeMug

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