Небуферинг оболочки для CygWin: возможно ли это?
Я протестировал на CygWin, выполняя «ls -R» с большим каталогом и отправляя вывод в Test.txt
файл, поэтому процесс занимает около 30 секунд; файл создан, но он пуст ; она будет заполнена только тогда, когда «LS -R» команда заканчивается, и мне нужно, чтобы увидеть содержимое файла тем временем новые данные ввода.
Предполагается, что проблема связана с буферизацией, которую операционная система делает перед записью в файл.
Вот что я протестировал, чтобы записать в файл без буферизации:
- Команда unbuffer из
expect
пакета: где она? Современнаяexpect
версия не имеет такойunbuffer
команды (см. Ниже):
./unbuffer -p ls / cygdrive / y / Repositorio / -R> Test.txt ./unbuffer ls / cygdrive / y / Repositorio / -R | Test.txt ./unbuffer -p ls / cygdrive / y / Repositorio / -R | Test.txt ./unbuffer ls / cygdrive / y / Repositorio / -R | ./unbuffer -p egrep "" | Test.txt ./unbuffer -p ls / cygdrive / y / Repositorio / -R | ./unbuffer -p egrep "" | Test.txt
- Устанавливая пакет Expect и называя «unbuffer» этот скрипт:
#! / usr / bin / Ожидается - # Описание: снятие буфера с выхода программы # Автор: Дон Либес, NIST eval spawn -noecho $ argv установить время ожидания -1 ожидать
- Устанавливая пакет Expect и называя «unbuffer» этот другой скрипт:
#! / usr / bin / Ожидается - # Описание: снятие буфера с выхода программы # Автор: Дон Либес, NIST if {[string сравни [lindex $ argv 0] "-p"] == 0} { # трубопровод установить stty_init "-echo" eval spawn -noecho [lrange $ argv 1 end] close_on_eof -i $ user_spawn_id 0 взаимодействовать { eof { # сбросить оставшийся вывод от дочернего ожидаемый тайм-аут 1-ре. + вернуть } } } еще { set stty_init "-opost" установить время ожидания -1 eval spawn -noecho $ argv ожидать }
- Скрипт команды:
скрипт -c "ls / cygdrive / y / Repositorio / -R" | Test.txt скрипт -c "ls / cygdrive / y / Repositorio / -R" / dev / null | Test.txt скрипт -q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | Test.txt скрипт -q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | grep "" - line-buffered | Test.txt скрипт -q -c "ls / cygdrive / y / Repositorio / -R" / dev / null | egrep "" - line-buffered | Test.txt
- Команда egrep с опцией отмены буферизации:
кошка BigFile.txt | egrep "" - line-buffered | Test.txt
Stdbuf : она не существует на современном CygWin, или я так думаю.
Другие методы:
ls / cygdrive / y / Repositorio / -R 1> & 2 | Test.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 к редирект-выход к-а-файла-без буферизации-на-UNIX-Linux
Результаты всегда одинаковы: выходной файл Test.txt
заполняется только в конце команды "ls -R".
Есть еще идеи, пожалуйста?
0 ответов на вопрос
Похожие вопросы
-
6
Какие функции Zsh вы используете?
-
8
Убийство Windows Shell
-
4
Изменить Cygwin Prompt
-
-
3
Mac OS X: обычные места, где должны жить бинарные файлы
-
2
Mac OS X: нужен простой скрипт
-
2
Как найти, а затем сравнить похожие файлы в папке Dropbox?
-
1
ksh эквивалент perl $! причина ошибки
-
3
Выясните, какой будет путь без символической ссылки?
-
4
Как запустить диалог свойств файла из командной строки?
-
3
Портативный Cygwin?