좋은 습관인가, 나쁜 습관인가? 표준 오류로 리디렉션하시겠습니까?

좋은 습관인가, 나쁜 습관인가? 표준 오류로 리디렉션하시겠습니까?

본론으로 돌아가기 위해 read사용자 입력을 받아 최종 출력을 인쇄하기 전에 대화형으로 메시지를 표시하는 스크립트가 있습니다. 호출하는 사용자는 다음과 같은 최종 출력을 얻을 것으로 예상됩니다.

AVAR=$(myscript arg1 arg2 arg3)

그래서 나는 myscript에서 더러운[?] 해킹[?]을 생각해 냈습니다.

# ... blah ...
echo -n "A prompt for the user " >> /dev/stderr
read SOMEVAR >> /dev/null
# ... other stuff ...
printf "Results\t$RESULT\n"

이것은 stderr을 사용하는 사악하고 나쁜 습관입니까, 아니면 제가 단지 수완이 풍부하고 교활한 것입니까? 제 무지를 용서해주세요. 저는 100% 독학을 했기 때문에 제가 원하지 않는 호출자 변수의 모든 것이 리디렉션되어야 한다는 연역적 추론을 사용합니다. 그러나 프롬프트가 표시되는 경우에는 여전히 표시되어야 합니다. stderr는 저입니다. 상상할 수 있는.

답변1

해결 방법: 예, 이는 나쁜 습관입니다. 부족한 점을 채워주신 @SatoKatsura에게 감사드립니다.

올바른 접근 방식은 다음과 같습니다.

# ... blah ...
echo -n "A prompt for the user " >&2
read SOMEVAR >> /dev/null
# ... other stuff ...
printf "Results\t$RESULT\n"

이는 이식 가능하며 더 좋고 안전한 방법입니다.

관련 정보