(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 ).