অনুপস্থিত কমান্ডের জন্য ত্রুটি কোড ফেরত দিতে 'whatis` সংশোধন করা হচ্ছে


0

অনুসরণ করুন অনুপস্থিত কমান্ডের জন্য "whatis" 0 প্রদান করে , আমি পরিবর্তন করার চেষ্টা করছি /usr/bin/whatis একটি অনুপযুক্ত কমান্ড প্রবেশ করার পরে একটি অ-শূন্য প্রস্থান কোড ফেরত দিতে। এটি করার জন্য আমার পদ্ধতিটি নিম্নোক্ত সেগমেন্টে একটি রিটার্ন পরিবর্তনশীল যোগ করা এবং লুপের শেষে যে পরিবর্তনশীলটি ফেরত দিতে হয়

while [ "$1" != "" ]
do
    found=0
    for d in /var/cache/man $manpath /usr/lib
    do
        if [ -f $d/whatis ]
        then
            if grep -"$grepopt1" "$grepopt2""$1" $d/whatis
            then
                found=1
            fi
        fi
    done

    if [ $found = 0 ]
    then
        echo "$1: nothing appropriate"
        **code=1**
    fi

    shift
done | eval ${PAGER:-more -E}
**return $code**

তবে, যেহেতু while লুপ পাইপ করা হয় eval, তাই এটি একটি subshell চালানো হয় code বাইরে বরাদ্দ করা হবে না while লুপ. আমি চেষ্টা করেছি বহু বিভিন্ন পদ্ধতি যাইহোক, এই সব একটি মান পাইপিং সম্পর্কে হয় while লুপ, পাইপ আউট একটি মান না while লুপ.

আমি খুঁজে পাওয়া একটি workaround কেবল সম্পূর্ণ অপসারণ করা হয় eval বিবৃতি, কিন্তু আমি একটি মূলনীতির মূল এক্সটেনসিবলি সংরক্ষণ করে এমন একটি পদ্ধতি চাই whatis

উত্তর:


1

PIPESTATUS একটি অ্যারে হয়। যেহেতু আপনি শুধুমাত্র প্রয়োজন $[PIPESTATUS[0]}, সাবস্ক্রিপ্ট বাদ দেওয়া যেতে পারে।

(
    code=0
    while [ "$1" != "" ]
    do
        found=0
        for d in /var/cache/man $manpath /usr/lib
        do
            if [ -f $d/whatis ]
            then
                if grep -"$grepopt1" "$grepopt2""$1" $d/whatis
                then
                    found=1
                fi
            fi
        done

        if [ $found = 0 ]
        then
            echo "$1: nothing appropriate"
            code=1
        fi

        shift
    done
    exit $code
) | eval ${PAGER:-more -E}
return $PIPESTATUS

থেকে man bash:

   PIPESTATUS
          An array variable (see Arrays below) containing a list  of  exit
          status  values  from the processes in the most-recently-executed
          foreground pipeline (which may contain only a single command).

ফিরে যাওয়ার চেষ্টা করছেন $PIPESTATUS নিম্নলিখিত ত্রুটি দেয় $ whatis hi hi: nothing appropriate /usr/local/bin/whatis: line 92: return: can only `return' from a function or sourced script যাইহোক, করছেন exit $PIPESTATUS পরিবর্তে return ঠিকভাবে কাজ করে
Max Coplan

আমি আপনার স্ক্রিপ্ট দৌড়ে না। না আমি আপনার দ্বারা তৈরি কোনো ত্রুটি সংশোধন করার চেষ্টা করেছিল। আমি আপনি আমাকে জিজ্ঞাসা না। আপনি পরিবর্তনশীল মান পড়া কিভাবে জিজ্ঞাসা code পাইপ সমাপ্ত করার পরে, যা আমি আমার উত্তর রাখা। আপনি যদি আপনার স্ক্রিপ্ট লিখতে চান তবে একটি নতুন প্রশ্ন জিজ্ঞাসা করুন। এছাড়াও, যদি আপনি চান, আপনার প্রশ্ন এবং / অথবা আমার উত্তর উভয় সম্পাদনা করতে বিনা দ্বিধায়। অথবা, আপনার নিজের উত্তর পোস্ট করুন।
David Anderson
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.