다음과 같이 원격 컴퓨터에서 스크립트를 실행하고 있습니다.
ssh $host "pip install -r /path/to/requirements.txt"
그러나 출력은 라인 버퍼링되지 않습니다. 연결이 종료되면 한 번에 한 라인씩 반환되지 않고 모든 라인(~10)이 한 번에 인쇄됩니다.
어떻게 되어가나요? 강제로 라인 버퍼링을 수행하도록 하는 방법이 있습니까?
(또한, $host
"수동"으로 들어가서 명령을 실행하면 예상대로 출력이 라인 버퍼링됩니다.)
답변1
pseudo-tty 할당을 강제 하는 데 사용됩니다 ssh -t ...
. (ssh를 통해 정상적으로 로그인할 때 얻게 되는 것입니다.)
답변2
Ryan Fox의 답변을 조금 확장하려면 터미널과 통신할 때 많은 프로그램(대부분? - 모든 C 프로그램의 기본값)이 라인 버퍼 표준 출력이지만 완전히 다른 방식으로 버퍼링됩니다. (C 표준에서는 stdout이 "대화형 장치를 참조하지 않도록 결정될 수 있는" 경우 처음에 완전히 버퍼링된다고 명시합니다.)
따라서 여러분이 보고 있는 것은 원격으로 실행 중인 프로그램의 출력(주어진 표준 출력)이 라인 버퍼링되지 않고 ssh에서 얻은 내용을 전달한다는 것입니다. (Ssh는 실제로 출력에서 전혀 버퍼링하지 않는다고 생각합니다. 이는 사용자가 원격 프로그램의 의도를 볼 수 있도록 보장하는 가장 마법적인 방법이 될 것입니다.)
답변3
Ryan Fox의 답변을 확장하면 ssh -t
나에게도 효과가 없었지만 ssh -tt
효과가 있습니다. -t에 대한 ssh 매뉴얼 페이지를 참조하십시오.
여러 -t 옵션은 ssh에 로컬 tty가 없더라도 tty 할당을 강제합니다.