বাশ কোনও ফাংশনের সংজ্ঞা প্রদর্শন করতে পারে?


262

ব্যাশে বাশ ফাংশনটির সংজ্ঞা দেখার কোনও উপায় আছে কি?

উদাহরণস্বরূপ, বলুন আমি ফাংশনটি সংজ্ঞায়িত করেছি foobar

function foobar {
    echo "I'm foobar"
}

পরে foobarচালিত কোডটি পাওয়ার কোনও উপায় আছে কি ?

$ # non-working pseudocode
$ echo $foobar
echo "I'm foobar"

উত্তর:


357

ব্যবহার typefoobarউদাহরণস্বরূপ যদি এটিতে সংজ্ঞায়িত হয় ~/.profile:

$ type foobar
foobar is a function
foobar {
    echo "I'm foobar"
}

এটি কী foobarছিল তা খুঁজে বের করে এবং যদি এটি কোনও ফাংশন হিসাবে সংজ্ঞায়িত করা হয় তবে এটি declare -fপমহোন্দ্ররা ব্যাখ্যা করে বলে।

ফাংশনটির মূল অংশটি (যেমন কোড) মুদ্রণ করতে ব্যবহার করুন sed:

type foobar | sed '1,3d;$d'

2
@sjsupersumit প্রশ্নটি স্পষ্টভাবে বাশ সমাধানের জন্য জিজ্ঞাসা করছে।
bfontaine

210

আপনি ঘোষিত ব্যবহার করে ব্যাশের কোনও ফাংশনের সংজ্ঞা প্রদর্শন করতে পারেন। উদাহরণ স্বরূপ:

declare -f foobar

1
দুর্দান্ত, বিন্দুতে, অন্যান্য লোড হওয়া স্ক্রিপ্ট ফাইলগুলিতে ফাংশনগুলি সংজ্ঞায়িত করার পরেও কাজ করে। Zsh এও কাজ করে।
দিয়েগো নিমো

2
আপনি যদি ব্যবহার করেন তবে নন-লিনাক্স সিস্টেমে পুরানো শেলগুলির সাথে কাজ করেtypeset -f
এমানুয়েল

ভাল এটি এটি কেবল functionসংজ্ঞাটি দেখায় , তাই যদি আপনি চান তবে আপনাকে পার্স করতে হবে না।
ribamar


4
set | grep -A999 '^foobar ()' | grep -m1 -B999 '^}'

ফুবারের সাথে ফাংশনটির নাম।


4
সমস্যা: কেবলমাত্র প্রথম "}" পর্যন্ত প্রদর্শিত হবে, যা যখনই সংজ্ঞায়িত "{... of" এর বাসা রাখে যা আসলেই নয় যা বাশ অনুমতি দেয়।
ডেসটিনি আর্কিটেক্ট

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