
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.out
para registrar algunas acciones directamente en el archivo.Puedes intentar
./myscript.sh 2>&1 | sed -e "s/<your regex>//g" | tee -a myscript.out
reemplazarlo<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>&4
y 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