相关疑难解决方法(0)

SSH 输出不是行缓冲的吗?

我在这样的远程机器上运行一个脚本:

ssh $host "pip install -r /path/to/requirements.txt"
Run Code Online (Sandbox Code Playgroud)

但输出不是行缓冲的;不是一次返回一行,而是在连接终止时一次性打印所有行 (~10)。

这是怎么回事?有没有办法强制它们被行缓冲?

(另外,声明一下:当我通过 ssh 进入$host并“手动”运行命令时,输出是行缓冲的,正如预期的那样)

ssh

37
推荐指数
3
解决办法
1万
查看次数

如果通过 cat 管道传输,grep 直到 EOF 才会输出

鉴于这个最小的例子

( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
Run Code Online (Sandbox Code Playgroud)

它输出LINE 1,然后,一秒钟后LINE 2如预期的那样输出。


如果我们通过管道将其传输到 grep LINE

( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
Run Code Online (Sandbox Code Playgroud)

正如预期的那样,行为与前一种情况相同。


如果,或者,我们通过管道将其传输到 cat

( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
Run Code Online (Sandbox Code Playgroud)

行为再次与预期相同。


但是,如果我们通过管道连接到grep LINE,然后到cat

( echo "LINE 1" ; sleep 1 ; echo …
Run Code Online (Sandbox Code Playgroud)

grep bash pipe

20
推荐指数
3
解决办法
3290
查看次数

什么阻止 stdout/stderr 交错?

假设我运行了一些进程:

#!/usr/bin/env bash

foo &
bar &
baz &

wait;
Run Code Online (Sandbox Code Playgroud)

我像这样运行上面的脚本:

foobarbaz | cat
Run Code Online (Sandbox Code Playgroud)

据我所知,当任何进程写入 stdout/stderr 时,它们的输出永远不会交错——stdio 的每一行似乎都是原子的。这是如何运作的?什么实用程序控制每行的原子性?

osx shell stdout output stderr

18
推荐指数
1
解决办法
2937
查看次数

控制台、外壳、终端、终端仿真器、终端多路复用器和窗口管理器之间有什么区别?

例如。FreeBSD/archlinux 的默认“界面/控制台”、终端、终端仿真器(如 Xterm)、终端多路复用器(如tmux)、窗口管理器(如awesome)之间有什么区别?Bash 和其他“shell”在哪里适合所有这些?

window-manager terminal-multiplexer terminal-emulator terminal console

7
推荐指数
1
解决办法
5395
查看次数