
Para um único script redirecionando stdout e stderr para um arquivo com isto:
./myscript.sh 2>&1 | tee -a out_file
funciona bem. Quando tento executar da mesma forma um script contendo várias caixas de diálogo criadas comdiálogocomando (e chamando outros scripts)
./main.sh 2>&1 | tee -a out_file
o out_file contém caracteres indesejados devido a essas caixas. Por exemplo:
#!/bin/bash
# myscript.sh
dialog --title "Title" \
--msgbox "Message Box" \
30 120
date
gera com:
$ ./myscript.sh 2>&1 | tee -a myscript.out
várias linhas semelhantes a esta:
[36m[44m [30m[40m[K[22;38H[39;49m(B[m[2;3H[30m[47mMessage Box[22;38H[39;49m(B[m
Como posso obter stdout e stderr sem esses caracteres (para os scripts principais e todos os scripts subsequentes)? Isso seria no exemplo a saída dedata. Seria bom ter o que um usuário inseriu em uma caixa de entrada.
Responder1
Você está tentando registrar a saída codificada por cores em um arquivo. Veja cores e formatação no bash:https://misc.flogisoft.com/bash/tip_colors_and_formatting
Você não pode alterar arbitrariamente o stdout neste caso. Porque se você otimizar o stdout para registro, também alterará a saída que os usuários veem.
Mas você tem algumas possibilidades:
A maneira mais fácil é adicionar em seu myscript.sh o comando
echo "Message Box printed" >> myscript.out
para registrar algumas ações diretamente no arquivo.Você pode tentar
./myscript.sh 2>&1 | sed -e "s/<your regex>//g" | tee -a myscript.out
substituir<your regex>
. Mas essa mudança também resulta. Então acho que não é isso que você está procurando.Ou você cria seu próprio descritor em myscript.sh
echo "Exit code: $? Textbox $usertext" 1>&4
e modifica o comando de diálogo como esteusertext=$(dialog --title "Title" --inputbox "Enter your text:" 30 120 "My Text" 3>&1 1>&2 2>&3)
Então você pode usar. myscript.sh 4>> myscript.out