我在这样的远程机器上运行一个脚本:
ssh $host "pip install -r /path/to/requirements.txt"
Run Code Online (Sandbox Code Playgroud)
但输出不是行缓冲的;不是一次返回一行,而是在连接终止时一次性打印所有行 (~10)。
这是怎么回事?有没有办法强制它们被行缓冲?
(另外,声明一下:当我通过 ssh 进入$host
并“手动”运行命令时,输出是行缓冲的,正如预期的那样)
小智 23
稍微扩展一下 Ryan Fox 的回答:许多程序(大多数? - 这是任何 C 程序的默认设置)在与终端交谈时行缓冲标准输出,否则完全缓冲它。(C 标准规定,当“可以确定不引用交互式设备”时,stdout 最初是完全缓冲的。)
所以你所看到的是你远程运行的程序的输出(给定标准输出)不是行缓冲的;ssh 只是传递它得到的东西。(我认为 ssh 实际上根本不对其输出进行缓冲 - 这将是确保用户看到远程程序意图的最不神奇的方式。)
小智 7
为了进一步扩展瑞恩福克斯的答案,ssh -t
对我也不起作用,但ssh -tt
确实如此。请参阅有关 -t 的 ssh 手册页:
多个 -t 选项强制 tty 分配,即使 ssh 没有本地 tty
归档时间: |
|
查看次数: |
12182 次 |
最近记录: |