¿Cómo redirigir stdout y stderr en un script bash con cuadros de diálogo?

¿Cómo redirigir stdout y stderr en un script bash con cuadros de diálogo?

Para un único script que redirige stdout y stderr a un archivo con esto:

./myscript.sh 2>&1 | tee -a out_file

funciona bien. Cuando intento ejecutar de la misma manera un script que contiene múltiples cuadros de diálogo creados condiálogocomando (y llamar a otros scripts)

./main.sh 2>&1 | tee -a out_file

el out_file contiene caracteres no deseados debido a estos cuadros. Por ejemplo:

#!/bin/bash
# myscript.sh

dialog --title "Title" \
--msgbox "Message Box" \
30 120
date 

genera con:

$ ./myscript.sh 2>&1 | tee -a myscript.out

varias líneas similares a esta:

[36m[44m  [30m[40m[K[22;38H[39;49m(B[m[2;3H[30m[47mMessage Box[22;38H[39;49m(B[m

¿Cómo puedo obtener stdout y stderr sin estos caracteres (para los scripts principales y posteriores)? Esa sería en el ejemplo la salida defecha. Es bueno tener lo que un usuario ingresó en un cuadro de entrada.

Respuesta1

Estás intentando registrar la salida codificada por colores en un archivo. Ver colores y formato en bash:https://misc.flogisoft.com/bash/tip_colors_and_formatting

No puede cambiar arbitrariamente la salida estándar en este caso. Porque si optimiza la salida estándar para el registro, también cambia la salida que ven los usuarios.

Pero tienes algunas posibilidades:

  • La forma más sencilla es agregar en myscript.sh el comando echo "Message Box printed" >> myscript.outpara registrar algunas acciones directamente en el archivo.

  • Puedes intentar ./myscript.sh 2>&1 | sed -e "s/<your regex>//g" | tee -a myscript.outreemplazarlo <your regex>. Pero esto también cambia el resultado. Entonces creo que eso no es lo que estás buscando.

  • O crea su propio descriptor en myscript.sh echo "Exit code: $? Textbox $usertext" 1>&4y modifica el comando de diálogo de esta manera. usertext=$(dialog --title "Title" --inputbox "Enter your text:" 30 120 "My Text" 3>&1 1>&2 2>&3)Luego puede usar. myscript.sh 4>> myscript.out

información relacionada