如何使用對話方塊重新導向 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

在這種情況下,您不能隨意更改標準輸出。因為如果您最佳化日誌記錄的標準輸出,那麼您也會更改使用者看到的輸出 wath。

但你有一些可能性:

  • 最簡單的方法是在 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

相關內容