সিস্টেম কমান্ড হিসাবে একই নামের সাথে ব্যবহারকারী সংজ্ঞায়িত ফাংশনকে ওভাররাইড করে


14

এই ফাংশনটি আমার ব্যবহারকারীর one / .bashrc এর একটিতে বিদ্যমান:

function rm()
{
        ls $*
        echo "rm?"
        read ans
        if [ "$ans" == 'y' ]; then
                /bin/rm $*
        fi
}

আমার ksh স্ক্রিপ্টে যে ব্যবহারকারীদের চালানো দরকার, আমার কাছে এর মতো একটি লাইন রয়েছে:

[[ "$KEEP" = "" ]] && \rm $FILE

যখন ব্যাকস্ল্যাশ ব্যবহারকারী-সংজ্ঞায়িত উপকরণগুলি থেকে মুক্তি পেয়েছে তবে স্ক্রিপ্টটি একই নামের সাথে ব্যবহারকারী সংজ্ঞায়িত ফাংশনগুলি চালানো থেকে বিরত রাখে না। ফলস্বরূপ, সিস্টেম ব্যবহারের পরিবর্তে আমার ব্যবহারকারীর আরএম () ফাংশনটি কল করা হয়।

আমি এই সুপারসার ব্যবহারকারী প্রশ্ন এবং প্রতিক্রিয়াটি পেয়েছি , কিন্তু রেজোলিউশনটি কেবল একটি বিল্টিন ফাংশনে প্রয়োগ হয়, সিস্টেম কমান্ড নয়।

ডাকা হওয়া থেকে আরএম কমান্ড কার্যকর করার জন্য সেরা, এবং কোনও নাম বা ফাংশন নয়? আমি কি আরএম এর পুরো পথটি নির্দিষ্ট করতে হবে এবং প্রতিটি সিস্টেম কমান্ড যা আমি নিশ্চিত করতে চাই তা সঠিকভাবে সম্পাদিত হয়েছে? একটি ভাল উপায় আছে কি?

উত্তর:


13

আপনি commandসাধারণ ব্যাশ ফাংশন লুকআপকে অবরুদ্ধ করতে ব্যবহার করতে পারেন ।

command rm

অ-ধ্বংসাত্মক উদাহরণ:

$ alias which='which -s'
$ function which { echo "which $@?" ; }
$ which which
which -s which?
$ command which which
/usr/bin/which

বিকল্পভাবে, এটি ব্যবহার করে কল করুন env(এতে প্রদত্ত নামের সাথে প্রথম প্রোগ্রামটি নির্বাহ করে $PATHবা পুরো পথ নির্দিষ্ট করে।

/usr/bin/env rm
/bin/rm

ধন্যবাদ, "কমান্ড" হ'ল আমি যা খুঁজছি। যদিও এটি কার্যকর করা প্রতিটি সিস্টেম কমান্ডের জন্য ব্যবহার করতে হবে এমন একধরনের আবদ্ধতা বলে মনে হচ্ছে। আমি অনুমান করি যে আপনি সিস্টেম কমান্ডটি চালাচ্ছেন তা নিশ্চিত করার একমাত্র নিশ্চিত আগুনের পথটি পুরো পথটি নির্দিষ্ট করা। তবে, আপনি সেই পদ্ধতির সাথে বিভিন্ন ডিস্ট্রো জুড়ে একই পথে থাকা কমান্ডগুলিতে ব্যাঙ্ক করছেন।
acm

@acm আমি যেমন লিখেছি, আপনিও এই envপথে যেতে পারেন । অতিরিক্তভাবে, আপনি একবার প্রতিটি সরঞ্জামের অবস্থান নির্ধারণ করতে পারেন এবং এটি একটি ভেরিয়েবলে সঞ্চয় করতে পারেন, যেমন RM=$( /usr/bin/env which rm ); [much more code]; $RM some_file;। আপনার স্ক্রিপ্টটি কীভাবে কার্যকর করা হয় তা আপনিও পরিবর্তন করতে পারেন। সাধারণত, ফাংশন এবং উপকরণগুলি উত্তরাধিকার সূত্রে প্রাপ্ত হয় না, অন্যথায় তারা স্ক্রিপ্টগুলি সর্বদা বিরতি করত।
ড্যানিয়েল বেক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.