본론으로 돌아가기 위해 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"
이는 이식 가능하며 더 좋고 안전한 방법입니다.