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”命令的末尾填充。
请有更多想法吗?
| 归档时间: |
|
| 查看次数: |
1248 次 |
| 最近记录: |