আমি আমার শেলটিতে সংজ্ঞায়িত ফাংশনগুলি কীভাবে তালিকাবদ্ধ করব?


221

সমস্ত উপনামের একটি তালিকা প্রদর্শন করতে আমি ওরফে টাইপ করতে পারি।

তবে ফাংশনগুলির জন্য, আমি যা করতে পারি তা গ্রেপ আমার .bash_profile

এটি কেবলমাত্র সেই ফাইলে পাওয়া যায়, সহায়ক ফাইলগুলিতে বা গতিশীলভাবে সংজ্ঞায়িত নয়।

বর্তমানে কোন কার্যগুলি সংজ্ঞায়িত করা হয়েছে তা খুঁজে পাওয়ার আরও সুবিধাজনক কোনও উপায় আছে?



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

উত্তর:


271

declare -F

ফাংশনের নাম এবং সংজ্ঞাগুলি বিল্টিন কমান্ডের -fবিকল্পের সাথে তালিকাভুক্ত হতে পারে declare(ব্যাশ বিল্টিনগুলি দেখুন)। -Fবিকল্পটি কেবল declare ফাংশনটির নাম তালিকাভুক্ত করবে (এবং option চ্ছিকভাবে উত্স ফাইল এবং লাইন নম্বর) number

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


1
জিএনইউ বাশ ৪.৩.৪6 (১) -রেলেজ (x86_64-pc-linux-gnu) -F নাম / -f পুরো ফাংশন তালিকাভুক্ত করে
ceph3us

5
"Alচ্ছিক" উত্স ফাইল / লাইন # পেতে, এটি প্রদর্শিত হবে আপনাকে এক্সটডিগ ( shopt -s extdebug) সক্ষম করতে হবে এবং declare -Fকমান্ডটিতে এক বা একাধিক ফাংশন নাম সরবরাহ করতে হবে । IOW, declare -Fনেই না ফাইলের নামের সরবরাহ / লাইন # S এমনকি যখন extdebug সক্রিয় করা হয়, যা আইএমও নথিপত্র থেকে স্পষ্ট নয়, না এটা বিশেষ করে স্বজ্ঞাত হয়।
রন বুর্ক

আরও ভাল সমাধানের জন্য নীচে @ ব্যবহারকারী495470 এর উত্তর দেখুন।
তারকাবিআমরনবোলাবস

82

ধরে নেওয়া বাশ শেল:

typeset -f

ফাংশন তালিকাভুক্ত করা হবে।

typeset -F

শুধু ফাংশন নাম তালিকাভুক্ত করা হবে।


8
আমার বাশ v4.1.17 (9)Obsolete. See `help declare'.
রিলেজ

5
এটি একটি সমার্থক শব্দটি জানতে পেরে এখনও দুর্দান্ত।
বামাকনফটন


51

declare -F প্রকৃতপক্ষে মুদ্রণগুলি কেবল ফাংশনের নাম নয় কমান্ড ঘোষণা করে:

$ declare -F
declare -f function1
declare -f function2

আপনি compgen -A functionকেবল ফাংশন নাম মুদ্রণ করতে ব্যবহার করতে পারেন :

$ compgen -A function
function1
function2

6
compgen -A functionআমি যা খুঁজছিলাম ঠিক সেটাই ছিল।

2
নিস! আমি আমার ক্ষেত্রেও ডাক্তারি চাইছিলাম ... আপনি উভয় উপকরণ এবং ফাংশন পেতে পারেনcompgen -a -A function
ম্যাট বাইরেন

+1 এবং আমি কেবলমাত্র আমার ব্যক্তিগত ফাংশনগুলি আউটপুট করতে (লিনাক্স ডেবিয়ানে) নিম্নলিখিতটি ব্যবহার করেছি:compgen -A function | grep "^[a-z]\+" | grep -vE "^dequote|^quote|^in_array"
Dmytro Dzyubak

30

টাইপসেট অপ্রচলিত, দয়া করে ব্যবহার করুন:

declare -f

অথবা

declare -f function_name

অথবা

type function_name

4
set | grep " ()"

পরিবর্তে , grep আপনার কাছে ব্যবহার করতে পারেন fgrep বা hgrep (hgrep আমার ব্যক্তিগত প্রিয়, এটা, grep কিন্তু এটা হাই-Lites ', grep-PED' ফলাফল।

hgrep এখানে পাওয়া যাবে: ACME ল্যাবস hgrep


1
এই ফাংশন কিন্তু ভেরিয়েবল আছে `()` মান তালিকা প্রস্তুত করা যাবে
অ্যালোয়িজ্ Mahdal

2
@AloisMahdal এখানে এক যে কাজগুলো করেনঃ set | grep " () $" | cut -d' ' -f1। তবে অন্যান্য উত্তরের তুলনায় এটি অত্যধিক জটিল।
wjandrea

5
grepএটির জন্য ভাল সমাধান নয়, ফাংশন সংজ্ঞাগুলির সাথে মেলে এমন স্ট্রিংগুলি মিথ্যা ধনাত্মক হবে। @ wjandrea এখনও বহু রেখার স্ট্রিং দ্বারা ধরা যেতে পারে, যেহেতু কোনও রেইজেক্স।
ম্যাট 21

1

আমি এ বিষয়ে কোনও বিশেষজ্ঞ নই, এখনও শিখছি, তবে এই প্রশ্নটি এবং এর উত্তরটি খুঁজে পাওয়ার পরেও কারণ আমি একই চেয়েছি, আমি পরে যা লিখেছিলাম তা দেওয়ার জন্য আমি নিম্নলিখিতগুলি (" আরকিটিপাল পলের ঘোষণা " উত্তরটির উপর ভিত্তি করে) লিখেছিলাম : উভয় উপকরণ এবং ফাংশনগুলির ফর্ম্যাট তালিকা:

function functionaliaslist() {
    echo
    echo -e "\033[1;4;32m""Functions:""\033[0;34m"
    declare -F | awk {'print $3'}
    echo
    echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
    alias | awk {'print $2'} | awk -F= {'print $1'}
    echo
    echo -e "\033[0m"
}

লির উত্তরটি দেখার আগে এটিই ছিল এবং এর থেকে এক্সট্রাপোলেটিংয়ের আগে আমি যথাযথ কমান্ড দিয়ে লাইনগুলি declareএবং aliasরেখাগুলি প্রতিস্থাপন করেছি compgen, তা পেতে:

function functionaliaslist() {
    echo
    echo -e "\033[1;4;32m""Functions:""\033[0;34m"
    compgen -A function
    echo
    echo -e "\033[1;4;32m""Aliases:""\033[0;34m"
    compgen -A alias
    echo
    echo -e "\033[0m"
}

আমি যা চেয়েছিলাম তার জন্য ট্রিট খারাপ করে। ভাগ করে নেওয়া যদি এটি অন্য কাউকে সহায়তা করে।

এখানে অন্যান্য "ক্রিয়াগুলি" প্রচুর পরিমাণে উপলব্ধ compgen -A [action](এবং compgenঅবশ্যই অন্যান্য বিকল্পগুলি )। আমি একটি ভাল লেখার আপ পাওয়া এখানে যা মানুষ পৃষ্ঠায় একটি লিঙ্ক অন্তর্ভুক্ত (কারণ man compgenকিছু ক্ষেত্রে কাজ করে না)।

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