0 votos

La modificación de `whatis " para devolver el código de error por falta de comandos

Seguimiento de "whatis" devuelve 0 para comandos falta, estoy tratando de modificar /usr/bin/whatis a devolver una salida distinto de cero código después de un inadecuado de comandos ha sido introducido. Mi método para hacer esto es agregar una variable de retorno en el siguiente segmento, y el retorno de esa variable después de la 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, desde la while bucle se canaliza en eval, se ejecuta en un subshell lo code no será asignado fuera de la while de bucle. He probado varios diferentes métodos, sin embargo, estos son todos acerca de la tubería de un valor EN el while de bucle, no de tuberías de un valor fuera de la while de bucle.

Una solución que he encontrado es simplemente la eliminación de todo eval declaración, pero me gustaría un método que conserva el original de la extensibilidad de la whatis

1voto

David Anderson Puntos 2189

PIPESTATUS es una matriz. Ya que sólo necesita $[PIPESTATUS[0]}, el subíndice puede ser omitido.

(
    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

De 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: