Eksik komutlar için hata kodunu döndürmek üzere "whatis" ı değiştirme


0

"Whatis" ifadesini takip etmek , eksik komutlar için 0 döndürür , /usr/bin/whatisuygunsuz bir komut girildikten sonra sıfır olmayan bir çıkış kodu döndürmeye çalışıyorum . Bunu yapma yaklaşımım, aşağıdaki segmente bir dönüş değişkeni eklemek ve döngünün sonundan sonra bu değişkeni döndürmektir.

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**

Bununla birlikte, whileilmek boru içine evalalındığından, alt kabukta çalıştırılır, bu nedenle ilmek codedışına atanmaz while. Birden çok farklı yöntem denedim , ancak bunların hepsi whiledöngüden bir değer vermek değil , döngü içine bir değer vermek while.

Bulduğum bir geçici çözüm, yalnızca tüm evalifadeyi kaldırmaktır , ancak orijinalinin genişletilebilirliğini koruyan bir yöntem istiyorum.whatis

Yanıtlar:


1

PIPESTATUSbir dizi. Sadece ihtiyacınız $[PIPESTATUS[0]}olduğundan, alt simge ihmal edilebilir.

(
    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

Kimden 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 scriptexit $PIPESTATUSreturn
— Dönmeye

Senaryonuzu asla çalıştırmadım. Ben de yapmış olabileceğiniz herhangi bir hatayı düzeltmeye çalıştım. Benden istediğini düşünmedim. codeBoruyu tamamladıktan sonra değişkenin değerini nasıl okuyacağımı sordunuz , bu da cevabımı yazdım. Birisinin komut dosyanızı yazmasını istiyorsanız, yeni bir soru sorun. Ayrıca, isterseniz, hem sorunuzu hem de cevabımı düzenlemek için çekinmeyin. Veya kendi cevabınızı gönderin.
— David Anderson,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.