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.