GNU/Linux >> Tutoriales Linux >  >> Linux

¿Ocultar la salida de un comando de shell solo en caso de éxito?

Solución 1:

Debería ser bastante fácil escribir un script para este propósito.

Algo como este script completamente no probado.

OUTPUT=`tempfile`
program_we_want_to_capture &2>1 > $OUTPUT
[ $? -ne 0 ]; then
    cat $OUTPUT
    exit 1
fi
rm $OUTPUT

Por otro lado, para los comandos que ejecuto como parte de un script, generalmente quiero algo mejor que simplemente imprimir todo el resultado. A menudo limito lo que veo a lo desconocido. Este es un guión que adapté de algo que leí hace más de una década.

#!/bin/bash

the_command 2>&1 | awk '
BEGIN \
{
  # Initialize our error-detection flag.
  ErrorDetected = 0
}
# Following are regex that will simply skip all lines
# which are good and we never want to see
/ Added UserList source/ || \
/ Added User/ || \
/ init domainlist / || \
/ init iplist / || \
/ init urllist / || \
/ loading dbfile / || \
/^$/ {next} # Uninteresting message.  Skip it.

# Following are lines that we good and we always want to see
/ INFO: ready for requests / \
{
  print "  " $0 # Expected message we want to see.
  next
}

# any remaining lines are unexpected, and probably error messages.  These will be printed out and highlighted.
{
  print "->" $0 # Unexpected message.  Print it
  ErrorDetected=1
}

END \
{
  if (ErrorDetected == 1) {
    print "Unexpected messages (\"->\") detected in execution."
    exit 2
  }
}
'
exit $?

Solución 2:

No creo que haya una forma limpia de hacer esto, lo único que se me ocurre es

  • Capture la salida del comando.
  • Compruebe el valor de retorno del comando y si falló
    • muestra la salida capturada.

Sin embargo, implementar esto podría ser un proyecto interesante, pero quizás más allá de las preguntas y respuestas.

Solución 3:

Configuraría una función bash como esta:

function suppress { /bin/rm --force /tmp/suppress.out 2> /dev/null; ${1+"[email protected]"} > /tmp/suppress.out 2>&1 || cat /tmp/suppress.out; /bin/rm /tmp/suppress.out; }

Entonces, podría simplemente ejecutar el comando:

suppress foo -a bar

Solución 4:

Pruébalo:

out=`command args...` || echo $out

Linux
  1. ¿Los paréntesis realmente ponen el comando en una subcapa?

  2. ¿Cuál es la diferencia de obtener salida de comando usando `command` y $(command) en Shell?

  3. ¿La mejor manera de cancelar todos los trabajos de Slurm desde la salida del comando Shell?

  4. ¿Cómo ejecutar el comando Vim desde el shell?

  5. ¿Cómo puedo ocultar la salida de una aplicación de shell en Linux?

Cómo redirigir la salida del comando de shell

¿Buscar texto en la salida del terminal?

¿Cómo puedo recorrer la salida de un comando de shell?

Obtenga la primera línea de la salida de un comando de shell

Redirigir la salida del comando en la ventana acoplable

¿Por qué slabtop -o solo devuelve las primeras 23 líneas cuando se canaliza el comando?