আমি কীভাবে ব্যাশ ফাংশনটি আনসেট করব না বা মুক্তি পাব?


33

আপনি যদি ব্যাশে পরিবেশগত পরিবর্তনশীল সেট বা রফতানি করেন তবে আপনি এটি আনসেট করতে পারেন । আপনি যদি ব্যাশে একটি উপন্যাস সেট করেন তবে আপনি এটি আনলিয়াস করতে পারেন । তবে সেখানে কোনও অকার্যকর বলে মনে হচ্ছে না ।

এটি (তুচ্ছ) বাশ ফাংশনটি বিবেচনা করুন, উদাহরণস্বরূপ, .bash_aliases ফাইলে সেট করুন এবং শেল ইনিশিয়ালেশনে পড়ুন।

function foo () { echo "bar" ; }

আমি আমার বর্তমান শেল থেকে এই ফাংশন সংজ্ঞাটি কীভাবে সাফ করতে পারি?
(আরম্ভের ফাইলগুলি পরিবর্তন করা বা শেলটি পুনরায় চালু করা গণনা করে না))


যা বলা হচ্ছে, সমস্তই unfunctionএকটি কমান্ডের সুন্দর নাম হবে :-)
জো

@Johannes Rössel: zsh এটা হয়েছে।
ক্রিস জনসেন

এইচএম, সত্যই। তবুও, আমি পাওয়ারশেলের এই সামান্য কিছু স্বজ্ঞাত এবং সামঞ্জস্যপূর্ণ আচরণের উপায়টি খুঁজে পাই :-)
জোয়

উত্তর:


50

সেট না বিল্ট-ইন কমান্ড একটি বিকল্প লাগে, -f, তাহলে ডিলিট ফাংশন:

unset -f foo

ব্যাশ ম্যানপেজে আনসেট এন্ট্রিটি ফর্ম করুন :

যদি -f নির্দিষ্ট করা থাকে তবে প্রতিটি নাম শেল ফাংশনকে বোঝায় এবং ফাংশন সংজ্ঞাটি সরানো হবে।

দ্রষ্টব্য: -fযদি একই নামের ভেরিয়েবল বিদ্যমান থাকে তবেই সত্যই প্রয়োজন। আপনার কাছে একটি পরিবর্তনশীল নামে না থাকে তাহলে foo, তারপর unset fooফাংশন মুছে ফেলবে।


এই যে আমি অনুপস্থিত ছিল। আমি দেখেছি চাই -fমাপদণ্ড রপ্তানি কিন্তু এটি মধ্যে পাওয়া ছিল সেট না । ধন্যবাদ।
কোয়াকোট কোয়েসোট

2
@ জাভিয়ারস্টুউউ: unsetবাহ্যিক আদেশ নয়, এটি শেলের একটি অংশ ( এই ক্ষেত্রে বাশ ); চেষ্টা করুন man bashএবং এর জন্য এন্ট্রিটি সন্ধান করুন unset(পরিচালনাটি বেশ বড়, বিভাগের unsetঅধীনে Shell Builtin Commandsরয়েছে)।
ক্রিস জনসন

4

দেখুন help unset:

unset: unset [-f] [-v] [-n] [name ...]

Unset values and attributes of shell variables and functions.

For each NAME, remove the corresponding variable or function.

Options:
  -f    treat each NAME as a shell function
  -v    treat each NAME as a shell variable
  -n    treat each NAME as a name reference and unset the variable itself
    rather than the variable it references

Without options, unset first tries to unset a variable, and if that fails,
tries to unset a function.

Some variables cannot be unset; also see `readonly'.

Exit Status:
Returns success unless an invalid option is given or a NAME is read-only.

সেখানে তন্ন তন্ন হয় unset --helpনা man unsetদুর্ভাগ্যবশত।


4
সেখানে নেই man unsetকারণ এটি একটি হল বিল্ট-ইন কমান্ড এবং জন্য বিল্ট-ইন কমান্ড সেখানে পরিবর্তে help। কিছু বিল্ট-ইন কমান্ডের জন্য এটি একটি বহিরাগত নির্বাহযোগ্যও বিদ্যমান। সন্দেহের ক্ষেত্রে যেমন চেষ্টা করুন type mycommnad। উদাহরণস্বরূপ type unsetএবং এটি আপনাকে উত্তর দেবে unset is a shell builtin। যদি আপনি জানতে চান যে এটি which echoনির্বাহযোগ্য খুব উপস্থিত রয়েছে কিনা চেষ্টা করুন (অন্য বুক্ট-ইন) এবং এটি কোথায় রয়েছে তা বলবে। --option_longএক্সিকিউটেবল কমান্ডের আদর্শ। চেষ্টা করুন echo --helpএবং /bin/echo --help:-)
হাস্তুর

@ হস্তুর এর লেজ সম্পাদনা করে উত্তরের সাথে আপনার মন্তব্য যুক্ত করতে নির্দ্বিধায় যদি পর্যালোচকরা এটি অনুমোদন করে তবে আপনাকে 2 পয়েন্ট দেওয়া হবে।
জ্যাভিয়ারস্টুউ

1
... জাভেয়ের চিন্তাধারার জন্য ধন্যবাদ: উত্তরটি পূরণ করার চেয়ে আপনার পক্ষে এটি আরও বেশি ছিল; আমার ধারণা আপনি মিস করেছেন যে এটি একটি অন্তর্নির্মিত কমান্ড ছিল এবং তাদের জন্য আপনাকে তার helpপরিবর্তে ব্যবহার করতে হবে man। (সত্যিই সত্য নয় কারণ আপনি সেগুলি বুলেটিন কমেন্টে বা সরাসরি এর সাথে ... man bashঅধ্যায়ে খুঁজে পেয়েছেনman BASH-BUILTINS )) এটি আরামদায়ক যে বাশ শেলের নীচে আপনি কেবল চেয়ে চাইতে পারেন helpএবং আপনি বিল্ট-ইন কমান্ডের তালিকা পাবেন :-)। (চেষ্টা করুন help helpএবং man manখুব)।
হাস্তুর

1
@ হাস্তুর আপনি সমস্ত পাঠকের উপকারের জন্য উত্তরটি ভালভাবে সম্পন্ন করতে পারেন। তারপরে আমরা ছোট মুদ্রণের খাঁজ কাটা ভাল মন্তব্য করতে মুছতে পারেন।
জ্যাভিয়ারস্টুউ

0

আমি সম্প্রতি nvmএটি সম্পূর্ণরূপে আনইনস্টল করে পুনরায় ইনস্টল করতে চেয়েছিলাম এবং এর যে কোনও পরিবেশ থেকে পরিত্রাণ পেতে চাইছি । দেখা যাচ্ছে যে এর থেকে মুক্তি পাওয়ার কারণটি nvmশেল ফাংশনগুলির একটি নৌকা বোঝা হিসাবে প্রয়োগ করা হয়েছে যা আপনার শেলের মধ্যে .bash_profileবা এর মাধ্যমে উত্সাহিত হয় .bashrcবা যেখানে আপনি এই স্রোসিং কমান্ডগুলি যুক্ত করেছিলেন এটি আপনাকে প্রথম ইনস্টল করার সময় আপনাকে বলেছিল।

প্রথমে which nvmকিছুই স্পষ্টভাবে nvmকমান্ড এবং অন্যদের এখনও পাওয়া যাচ্ছিল না ফেরার দ্বারা প্রথম ব্যাফল করা , আমি অবশেষে আবিষ্কার করেছি declare -Fযে এটি শেল ফাংশনগুলির একটি গুচ্ছ। আমি কেবল শেলটি মেরে নতুন একটি শুরু করতে চাইনি (কারণ এখানে প্রাসঙ্গিক নয়), সুতরাং আমি nvmএই শেলটির বাইরে ফাংশনগুলি সাফ করে দিয়েছি :

for F in `declare -F | grep -e nvm | cut -f 3 -d\ `; do unset -f $F; done

এতে কিছু প্রকারভেদ কারও পক্ষে সহায়ক হতে পারে যে যে কোনও কারণেই অনুরূপ কিছু করতে চায় এবং একটি নতুন শেল পুনরায় আরম্ভ করতে পারে না বা চায় না।

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