(16 respuestas)
Cerrado el año pasado.
Tengo una secuencia de comandos de compilación que ejecuta un comando largo que produce una gran cantidad de salida que fue así:
./compile
Para solucionar problemas de rendimiento de la compilación, quiero usar ts (de moreutils) que antepone cada línea de salida con una marca de tiempo. Así que actualicé mi script así:
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
Esto funciona, pero ahora el valor de salida siempre es , evento cuando compile falla (creo, porque ts sale sin un error).
¿Cómo puedo actualizar mi script para devolver compile? el código de salida al usar ts ?
Respuesta aceptada:
Como está usando Bash, puede usar su $PIPESTATUS que es una matriz que contiene los diferentes códigos de salida de los comandos en una canalización:
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh tiene una característica similar pero usa el $pipestatus matriz en su lugar (recuerde también zsh las matrices se numeran desde 1 , no ).