ダイアログ ボックスを使用して bash スクリプトで stdout と stderr をリダイレクトするにはどうすればよいですか?

ダイアログ ボックスを使用して bash スクリプトで stdout と stderr をリダイレクトするにはどうすればよいですか?

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、ダイアログコマンドを次のように変更しますusertext=$(dialog --title "Title" --inputbox "Enter your text:" 30 120 "My Text" 3>&1 1>&2 2>&3). myscript.sh 4>> myscript.out

関連情報