
Для одного скрипта, перенаправляющего stdout и stderr в файл, выполните следующее:
./myscript.sh 2>&1 | tee -a out_file
работает отлично. Когда я пытаюсь запустить таким же образом скрипт, содержащий несколько диалоговых окон, созданных с помощьюдиалогкоманда (и вызов других скриптов)
./main.sh 2>&1 | tee -a out_file
out_file содержит нежелательные символы из-за этих полей. Например:
#!/bin/bash
# myscript.sh
dialog --title "Title" \
--msgbox "Message Box" \
30 120
date
генерирует с помощью:
$ ./myscript.sh 2>&1 | tee -a myscript.out
несколько строк, похожих на эту:
[36m[44m [30m[40m[K[22;38H[39;49m(B[m[2;3H[30m[47mMessage Box[22;38H[39;49m(B[m
Как мне получить stdout и stderr без этих символов (для основного и всех последующих скриптов)? Это будет в примере выводдата. Было бы неплохо иметь то, что пользователь ввел в поле ввода.
решение1
Вы пытаетесь записать в файл вывод с цветовым кодированием. Смотрите цвета и форматирование в bash:https://misc.flogisoft.com/bash/tip_colors_and_formatting
В этом случае вы не можете произвольно изменять stdout. Потому что если вы оптимизируете stdout для логирования, то вы также меняете вывод, который видят пользователи.
Но у вас есть некоторые возможности:
Самый простой способ — добавить в myscript.sh команду
echo "Message Box printed" >> myscript.out
для записи некоторых действий непосредственно в файл.Вы можете попробовать
./myscript.sh 2>&1 | sed -e "s/<your regex>//g" | tee -a myscript.out
заменить<your regex>
. Но это изменение тоже выводит. Так что я думаю, что это не то, что вы ищете.Или вы создаете свой собственный дескриптор в myscript.sh
echo "Exit code: $? Textbox $usertext" 1>&4
и изменяете команду dialog следующим образом.usertext=$(dialog --title "Title" --inputbox "Enter your text:" 30 120 "My Text" 3>&1 1>&2 2>&3)
Затем вы можете использовать. myscript.sh 4>> myscript.out