대화 상자를 사용하여 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을 최적화하면 사용자가 보는 출력도 변경되기 때문입니다.

하지만 몇 가지 가능성이 있습니다.

  • echo "Message Box printed" >> myscript.out가장 쉬운 방법은 일부 작업을 파일에 직접 기록하는 명령을 myscript.sh에 추가하는 것입니다 .

  • 시도해 ./myscript.sh 2>&1 | sed -e "s/<your regex>//g" | tee -a myscript.out보고 교체 할 수 있습니다 <your regex>. 하지만 이 변경 사항도 출력됩니다. 그래서 나는 그것이 당신이 찾고 있는 것이 아니라고 생각합니다.

  • echo "Exit code: $? Textbox $usertext" 1>&4또는 다음과 같이 대화 상자 명령을 사용하여 myscript.sh에서 고유한 설명자를 만들고 수정하면 usertext=$(dialog --title "Title" --inputbox "Enter your text:" 30 120 "My Text" 3>&1 1>&2 2>&3)다음을 사용할 수 있습니다.. myscript.sh 4>> myscript.out

관련 정보