SSH 출력이 라인 버퍼링되지 않습니까?


35

다음과 같이 원격 컴퓨터에서 스크립트를 실행하고 있습니다.

ssh $host "pip install -r /path/to/requirements.txt"

그러나 출력은 라인 버퍼링되지 않습니다. 한 번에 한 줄만 반환되는 대신 연결이 종료되면 모든 줄 (~ 10)이 모두 한 번에 인쇄됩니다.

이게 뭐야? 그것들을 강제로 라인 버퍼링하는 방법이 있습니까?

(또한 명백하게 : 내가 $host수동으로 명령을 ssh 하고 실행할 때 출력이 예상대로 라인 버퍼링됩니다)

답변:


45

ssh -t ...의사 -tty 할당을 강제 실행하는 데 사용 합니다 (ssh를 통해 정상적으로 로그인 할 때 얻는 것임).


불행히도 도움이되지 않았습니다. 이것은 MTU에서도 문제가 될 수 있지만 어느 것도 도움이되지 못했습니다.
Nick Roz

아래의 Magnus의 주석을 참조하십시오 -tt-
Tom Dalton

23

Ryan Fox의 답변을 조금 확장하려면 : 많은 프로그램 (대부분? C 프로그램의 기본값) 라인 버퍼 stdout 터미널과 대화 할 때 stdout, 그렇지 않으면 완전히 버퍼링하십시오. C 표준은 stdout이 "대화식 장치를 나타내지 않는다고 판단 될 때"처음에 완전히 버퍼링되도록 지정합니다.

여러분이보고있는 것은 원격으로 실행중인 프로그램의 출력 (stdout에 주어진)이 라인 버퍼링되지 않는다는 것입니다. ssh는 얻을 때 얻는 것을 통과합니다. (ssh는 실제로 출력에서 ​​버퍼링을 전혀하지 않는다고 생각합니다. 사용자가 원격 프로그램의 의도를 알 수있는 가장 마법적인 방법입니다.)


익명의 사용자 stdout이 완전히 버퍼링되고 라인 버퍼링되지 않았 음을 제안 합니다.
Michael Mrozek

Dave Vandervies는 자신이 편집을 한 사람이고 대역이 맞다고 말합니다 (즉, stdout은 처음에 완전히 버퍼링되고 라인 버퍼링되지 않음).
David Wolever

6

Ryan Fox의 답변을 더 넓히려면 ssh -t나에게도 효과가 없었지만 ssh -tt그랬습니다. -t에 대한 ssh 매뉴얼 페이지를 참조하십시오.

ssh에 로컬 tty가없는 경우에도 다중 -t 옵션이 tty 할당을 강제합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.