
Für ein einzelnes Skript, das stdout und stderr folgendermaßen in eine Datei umleitet:
./myscript.sh 2>&1 | tee -a out_file
funktioniert einwandfrei. Wenn ich versuche, auf die gleiche Weise ein Skript auszuführen, das mehrere Dialogfelder enthält, die mitDialogBefehl (und Aufruf anderer Skripte)
./main.sh 2>&1 | tee -a out_file
Die Ausgabedatei enthält aufgrund dieser Felder unerwünschte Zeichen. Beispiel:
#!/bin/bash
# myscript.sh
dialog --title "Title" \
--msgbox "Message Box" \
30 120
date
erzeugt mit:
$ ./myscript.sh 2>&1 | tee -a myscript.out
mehrere Zeilen ähnlich dieser:
[36m[44m [30m[40m[K[22;38H[39;49m(B[m[2;3H[30m[47mMessage Box[22;38H[39;49m(B[m
Wie bekomme ich stdout und stderr ohne diese Zeichen (für main und alle nachfolgenden Skripte)? Das wäre im Beispiel die Ausgabe vonDatum. Schön zu haben wäre, was ein Benutzer in ein Eingabefeld eingegeben hat.
Antwort1
Sie versuchen, farbcodierte Ausgaben in eine Datei zu protokollieren. Siehe Farben und Formatierung in Bash:https://misc.flogisoft.com/bash/tip_colors_and_formatting
Sie können in diesem Fall die Standardausgabe nicht beliebig ändern. Denn wenn Sie die Standardausgabe für die Protokollierung optimieren, ändern Sie auch die Ausgabe, die der Benutzer sieht.
Aber Sie haben einige Möglichkeiten:
Am einfachsten ist es, in Ihrem myscript.sh den Befehl hinzuzufügen,
echo "Message Box printed" >> myscript.out
um einige Aktionen direkt in der Datei aufzuzeichnen.Sie können versuchen
./myscript.sh 2>&1 | sed -e "s/<your regex>//g" | tee -a myscript.out
, zu ersetzen<your regex>
. Aber das ändert auch die Ausgabe. Ich denke also, das ist nicht das, wonach Sie suchen.Oder Sie erstellen Ihren eigenen Deskriptor in myscript.sh mit
echo "Exit code: $? Textbox $usertext" 1>&4
und ändern den Dialogbefehl wie folgtusertext=$(dialog --title "Title" --inputbox "Enter your text:" 30 120 "My Text" 3>&1 1>&2 2>&3)
Dann können Sie verwenden. myscript.sh 4>> myscript.out