Skip to content

Instantly share code, notes, and snippets.

@neverkas
Last active June 12, 2023 16:39
Show Gist options
  • Save neverkas/8a43e3e8fa797fc0d8a6c33c8fd79cc4 to your computer and use it in GitHub Desktop.
Save neverkas/8a43e3e8fa797fc0d8a6c33c8fd79cc4 to your computer and use it in GitHub Desktop.
pgrep + exit status

Conceptos Básicos

Estado de Salida (Exit status)

  • valor devuelto por un programa al terminar su ejecución
  • persiste en la variable especial de bash $?
  • el valor es 0 si el programa tuvo éxito, si es distinto de 0 entonces NO tuvo éxito

STDOUT y STDERR

(STDERR) Error Estándar ó Standard Error

  • el (fd) File Descriptor se representa con el valor 2 y lo encontramos en /dev/fd/2
  • si un programa escribe en el STDERR, es porque se utilizaron opciones que no posee ó sólo porque falló su ejecución

el STDOUT es la "Salida Estándar" (Standard Output)

  • el (fd) File Descriptor se representa con el valor 1 y lo encontramos en /dev/fd/1
  • no confundir su (fd) que tiene valor 1 con el "estado de salida" de un programa con valor 1
  • si un programa escribe en el STDOUT, se imprime por la pantalla
  • Ej. el comando echo por defecto escribe en el stdout, lo que implíca que se imprima por pantalla

Operador de redirección >

  • redirecciona la salida de un programa a un archivo (Ej. a un archivo de tipo regular, a un archivo de dispositivo)
  • puede redireccionar la STDOUT (Salida estándar) de la forma programa 1>archivo ó bien programa >archivo
  • puede redireccionar el STDERR (Estándar error) de la forma programa 2>archivo
  • Ej. redireccionamos la salida estándar al archivo de dispositivo /dev/null para NO imprimir por pantalla
# Escenario
# ---------
# - 1 proceso ejecutando (/usr/bin/emacs27)
# - utilizar el "Estado de Salida" (exit status) del comando `pgrep` para saber si un proceso está ejecutando
# stdout: not running
pgrep --exact emacs26 >/dev/null && echo "running" || echo "not running"
# stdout: running
pgrep --exact emacs27 >/dev/null && echo "running" || echo "not running"
# - stdout: (nothing, no se imprimirá nada por pantalla)
# - estado de salida de `pgrep`: 1 (no tuvo éxito, no encontró el programa emacs26 entre los procesos en ejecución)
# - la variable especial de Bash $? tendrá el valor 1
pgrep -x emacs26
echo $?
# - stdout: (nothing, no se imprimirá nada por pantalla)
# - estado de salida de `pgrep`: 0 (tuvo éxito, encontró el programa emacs27 entre los procesos en ejecución)
# - la variable especial de Bash $? tendrá el valor 0
pgrep -x emacs27 >/dev/null
echo $?
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment