"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
$PIPESTATUS$ whatis hi hi: nothing appropriate /usr/local/bin/whatis: line 92: return: can only `return' from a function or sourced scriptexit $PIPESTATUSreturn