bash의 대화식 모드를 사용하여 간단한 터미널 GUI를 구현하려고합니다. 성공적으로 bash를 호출하여 stdout을 얻고 모든 것을 텍스트보기로 인쇄하십시오. 명령을 실행할 수 있으려면 텍스트보기의 사용자 입력을 bash의 stdin으로 전달하십시오. 오류 메시지가 나타나지 않는 것을 제외하고는 훌륭하게 작동합니다.bash가 표준 입력을 stderr로 포워드하지 못하도록하십시오.
그러나 bash의 stderr을 내 텍스트보기로 인쇄 할 때 이상한 것으로 나타났습니다. 지금 오류 메시지를받는 것 외에도 bash는 stdin에서 stderr까지 모든 것을 전달하는 것으로 보입니다. 이 때문에 내가 입력하는 모든 문자는 두 번 인쇄됩니다 (한 번 입력하면 정상적으로 인쇄되고 한 번만 인쇄되므로 stderr).
stderr (bash-3.2$
)을 통해 프롬프트가 인쇄 된 것처럼 보입니다. 이것은 예상 된 행동입니까? 이것을 억제 할 수 있습니까?
나는 또한 사용 입력을 캡쳐하고 (사용자가 텍스트보기에 직접 입력하지 않도록) bash를 사용하여 사용자 입력을 인쇄하려고했다. 이 거의 표준 출력 및 표준 에러를 통해 출력의 순서를 제외하고, 노력하는 것은 랜덤 :
이 (두 번째 test
가 있습니다 :
나는 가끔이 얻을 입력 echo test
다음과 같은 명령을 입력하고 충돌하는 경우 출력, 내가 testtest
)
bash-3.2$ echo testtest
bash-3.2$
를 입력하지 않은 경우에 나는 얻을 :
bash-3.2$ echo test
bash-3.2$ test
최종 주문 번호 \n
, 출력 및 다음 bash-3.2$
은 분명히 섞여 있습니다.
나는 그 대답을 모른다. 그러나 나는 옛날 DOS'@echo off'를 생각 나게한다. – Madbreaks
어떻게 bash를 기동하고 있니? 당신이 실제로 무엇을 구현하는지 모르겠습니다. – Michael
저에게 버퍼링 문제가있는 것 같습니다. bash는 표준 터미널 에뮬레이터의 사용자가 입력 한 내용을 볼 수 있도록 stderr에 stdin echo를 수행합니다. stdout과 stderr에 이상한 버퍼링이 생기므로 bash에서 문자를 읽어들이는 것을 막을 수 있습니다. 하지만 ... 객관적으로는 모르겠다. 그래서 나는 그 이상으로 너를 도울 수 없다. – liori