0 votos

Modificación de `whatis` para que devuelva el código de error de los comandos que faltan

Seguimiento de "whatis" devuelve 0 para los comandos que faltan Estoy tratando de modificar /usr/bin/whatis para devolver un código de salida distinto de cero después de haber introducido un comando inadecuado. Mi enfoque para hacer esto es añadir una variable de retorno en el siguiente segmento, y devolver esa variable después del final del bucle

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

Sin embargo, como el while se canaliza en el bucle eval se ejecuta en un subshell así que code no se asignará fuera del while bucle. He probado múltiples diferentes métodos sin embargo, se trata de introducir un valor en el while y no se envía un valor fuera del bucle while bucle.

Una solución que encontré es simplemente eliminar todo el eval pero me gustaría un método que conservara la extensibilidad original de whatis

1voto

David Anderson Puntos 2189

PIPESTATUS es una matriz. Dado que sólo necesita $[PIPESTATUS[0]} el subíndice puede omitirse.

(
    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

Desde 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).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X