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

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

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

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 할당을 강제합니다.

관련 정보