Często przesyłam dane wyjściowe programu do mniej, np
produce_output | less
Działa to świetnie, dopóki nie produce_output
wytworzy dużej ilości danych wyjściowych. Jeśli szukam tekstu głęboko w pliku, mniej raportów
Calculating line numbers... (interrupt to abort)
Jeśli przerywam za pomocą Control + C, to również zabija produce_output
, co powstrzymuje go przed dalszym wytwarzaniem. Czy jest jakiś sposób na przesłanie przerwania na mniej, aby produce_output
działało?
Wiem, że mógłbym skorzystać kill -INT less_process
, ale myślę, że musi być lepsze rozwiązanie.
kill
.select
do oczekiwania na wejście jednocześnie z pliku / potoku i terminala.F
działa tryb (obserwuj). Rury i tty są pollable w ten sam sposób.Możesz wyłączyć numery linii za pomocą
opcja.
źródło
Przy pracy z dużą ilością danych wyjściowych bardzo pomocne okazało się wysłanie danych wyjściowych do pliku i użycie
tail -f
lubless +F
obejrzenie, np .:2>&1
Składnia zapewnia, że zarówno stdout i stderr przejdź doout
--- Usuń, że jeśli tylko chcesz stdout przechodząc do pliku. W ten sposób możesz sprawdzić dane wyjściowe na różne sposoby (nawet z innej maszyny), bez konieczności bałagania się w programie produkującym dane wyjściowe.Zauważ, że
2>&1
może być specyficzne dla bash (nie jestem pewien). Upewnij się, że masz wystarczającą ilość miejsca na dysku dla pliku wyjściowego :-)źródło
2>&1
to POSIX, goły>&
to bashism.less +F
w moim przykładzie; Właśnie zaktualizowałem swoją odpowiedź.less +F
(ponieważless +F
przetwarza dane podczas ich generowania). Podany przeze mnie przykład nie ma tego samego problemu, co pierwotnie opublikowany: ctrl + c nie przerywaprocess_output
. Jeśli ktoś nie dba o funkcjonalności „podążać”, można uruchomićproduce_output > out 2>&1
, a następnieless out
. Problemproduce_output | less
polega na tym, że jeśli coś złamie rurę (np. Przypadkowe uderzenie w „q”less
), toproduce_output
umrze (bez specjalnej obsługi SIGPIPE).Możesz także po prostu to zrobić:
źródło