Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

297
Views
¿Cómo obtener el estado de éxito del último comando de shell Bash dentro de un script de shell?

A veces hay dos comandos que suelo invocar seguidos. Sin embargo, el segundo comando solo tiene sentido en caso de que el primer comando haya tenido éxito.

Quería hacer algo como esto:

 #!/bin/bash if [ $? -gt 0 ] then echo "WARNING: previous command entered at the shell prompt failed" fi

Pero no funciona:

 t@quad:~$ echo "abc" | grep def t@quad:~$ ./warnme.sh Last command succeeded

Lo que me gustaría es algo un poco como esto:

 t@quad:~$ echo "abc" | grep def t@quad:~$ echo ${PIPESTATUS[1]} 1

Donde podemos ver claramente que el último comando falló.

El resultado que me gustaría tener:

 t@quad:~$ echo "abc" | grep def t@quad:~$ ./warnme.sh WARNING: previous command entered at the shell prompt failed

No puedo encontrar una manera de hacerlo.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

command1 && command2

hace exactamente lo que desea: el comando 2 se ejecuta solo si el comando 1 tiene éxito. Por ejemplo podrías hacer:

 ls a.out && ./a.out

Entonces a.out solo se ejecutaría si pudiera aparecer en la lista. Hice un wikiblog sobre esto en http://www.linuxintro.org/wiki/%26%26

over 4 years ago · Santiago Trujillo Report

0

Una opción es poner esto justo antes de la lista de comandos que desea ejecutar solo si el anterior fue exitoso:

 set -e

Esto cerrará la secuencia de comandos si alguno de los comandos que le siguen devuelve un valor distinto de cero (generalmente un error). Puedes apagarlo de nuevo con:

 set +e

O si prefiere apagarlo solo por una línea, puede simplemente hacer lógico-O el comando con verdadero:

 mycommand || true

Para muchas de mis secuencias de comandos, he configurado -e en la parte superior de la secuencia de comandos como una característica de seguridad para evitar que la secuencia de comandos caiga en cascada y haga algo peligroso.

over 4 years ago · Santiago Trujillo Report

0

Qué tal si:

 echo "abc" | grep def || ./warnme.sh

Donde warnme.sh ahora es solo la advertencia sin la prueba. Solo se llama si falla el primer comando.

En otras palabras, sería lo mismo que:

 echo "abc" | grep def || echo "WARNING: That didn't work..."
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!