pgrep -f sale con 1

pgrep -f sale con 1
RUNNING_APPS=$(pgrep -f "somePattern")
echo $?

#results in
1

¿Cómo puedo hacer que mi comando pase con el código de salida 0?

Respuesta1

En mi sistema Arch, con pgrepfrom procps-ng, veo esto en man pgrep:

EXIT STATUS
       0      One  or  more processes matched the criteria. For
              pkill the process must also  have  been  success‐
              fully signalled.
       1      No  processes  matched  or  none of them could be
              signalled.
       2      Syntax error in the command line.
       3      Fatal error: out of memory etc.

Entonces así es como es: pgrepsaldrá con 1 si todo funcionó bien pero no hubo procesos que coincidan con la cadena de búsqueda. Esto significa que necesitarás utilizar una herramienta diferente. Quizás algo como lo que Kusalananda sugirió en los comentarios yilkkachu publicado como respuesta:

running_apps=$(pgrep -f "somePattern" || exit 0)

Pero, en mi opinión, un mejor enfoque sería cambiar el guión. Y en lugar de usar set -e, haga que salga manualmente en los pasos importantes. Entonces, puedes usar algo como esto:

running_apps=$(pgrep -fc "somePattern")
if [ "$running_apps" = 0 ]; then
    echo "none found"
else
    echo "$running_apps running apps"
fi

Respuesta2

Con set -elos comandos que en el lado izquierdo de los operadores AND ( &&) u OR ( ||) no provocan que el shell se cierre, por lo que puede suprimir el error agregando || true.

Por lo tanto, esto debería generarse 0independientemente de los procesos encontrados (y no salir antes de generarlo):

set -e
RUNNING_APPS=$(pgrep -f "somePattern" || true)
echo $?

información relacionada