是否有等效fflush()
于 shell 命令的 C 函数?
echo "kkkk"
flush <<< are there some command to execute to flush stdout?
简短的回答:不需要对 shell 脚本执行显式刷新。所有 shell 输出(通过 echo)都没有缓冲。输出立即发送到输出设备。如果将输出通过管道传输到另一个程序中,则情况会更加复杂,该程序可能会缓冲它的输出。
长答案:考虑
(echo aaa ; sleep 3 ; echo bbb)
它将显示“aaa”,延迟 3 秒后显示“bbb” - 因为管道构造将导致 C 程序使用缓冲输出。
如上所述,如果输出(通过管道)发送到将缓冲输出的程序,则第一行可能会延迟,并与第二行同时显示(延迟 3 秒后)。解决方案是在管道中的其他程序上强制“行缓冲”(或不缓冲)。
例如,给定一个简单的“C”程序将标准输入复制到标准输出:
int main() { char b[256] ; while (fgets(b, sizeof(b), stdin) ) fputs(b, stdout) };
并运行
(echo aaa ; sleep 3 ; echo bbb ) | a.out | cat
将导致在 a.out 中缓冲,延迟 3 秒后显示 'aaa' 和 'bbb'。
不,你永远不需要它。
当一个程序(例如echo
)退出时,所有输出数据都会自动刷新。如果程序还没有退出,那么刷新是内部问题,与 shell 无关。