Sop*_*rez 9 cygwin shell buffer
我已经在 CygWin 上测试过使用大目录执行“ls -R”并将输出Test.txt
发送到文件,因此该过程大约需要 30 秒才能完成;文件已创建,但为空;它只会在“ls -R”命令完成时填充,我需要在输入新数据的同时查看文件内容。
问题应该来自操作系统在写入文件之前进行的缓冲。
这是我为了在没有缓冲的情况下写入文件而进行的测试:
expect
:它在哪里?现代expect
版本没有这样的unbuffer
命令(见下文):./unbuffer -pls /cygdrive/y/Repositorio/ -R > Test.txt ./unbuffer ls /cygdrive/y/Repositorio/ -R | 三通测试.txt ./unbuffer -pls /cygdrive/y/Repositorio/ -R | 三通测试.txt ./unbuffer ls /cygdrive/y/Repositorio/ -R | ./unbuffer -p egrep "" | 三通测试.txt ./unbuffer -pls /cygdrive/y/Repositorio/ -R | ./unbuffer -p egrep "" | 三通测试.txt
#!/usr/bin/expect -- # 描述: unbuffer 程序的标准输出 # 作者:Don Libes,NIST eval spawn -noecho $argv 设置超时-1 预计
#!/usr/bin/expect -- # 描述: unbuffer 程序的标准输出 # 作者:Don Libes,NIST if {[string compare [lindex $argv 0] "-p"] == 0} { # 管道 设置 stty_init "-echo" eval spawn -noecho [lrange $argv 1 end] close_on_eof -i $user_spawn_id 0 相互影响 { eof{ # 刷新子进程的剩余输出 期望 -timeout 1 -re .+ 返回 } } } 别的 { 设置 stty_init "-opost" 设置超时-1 eval spawn -noecho $argv 预计 }
脚本 -c "ls /cygdrive/y/Repositorio/ -R" | 三通测试.txt script -c "ls /cygdrive/y/Repositorio/ -R" /dev/null | 三通测试.txt script -q -c "ls /cygdrive/y/Repositorio/ -R" /dev/null | 三通测试.txt script -q -c "ls /cygdrive/y/Repositorio/ -R" /dev/null | grep "" --line-buffered | 三通测试.txt script -q -c "ls /cygdrive/y/Repositorio/ -R" /dev/null | egrep "" --line-buffered | 三通测试.txt
cat BigFile.txt | egrep "" --line-buffered | 三通测试.txt
该stdbuf:它不能在现代CygWin的存在,还是让我觉得。
另一种方法:
ls /cygdrive/y/Repositorio/ -R 1>&2 | 三通测试.txt ls /cygdrive/y/Repositorio/ -R 1>&2 |& tee Test.txt
用bash
和完成的测试mintty
。
检查并测试了这些线程中的所有内容:
将“tail -f”输出写入另一个文件
https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe
https://serverfault.com/questions/294218/is-there-a -way-to-redirect-output-to-a-file-without-buffering-on-unix-linux
结果总是一样的:输出文件Test.txt
只在“ls -R”命令的末尾填充。
请有更多想法吗?