Czy istnieje automatycznie przewijane, opóźnione czasowo polecenie Unixa?

10

Chciałbym zobaczyć zwolnione działanie dużych poleceń, jak pokaz slajdów z np. Automatycznym opóźnieniem 500 ms między każdym przewijaniem. Jaki jest najprostszy sposób na osiągnięcie tego?

Błażej Wieliczko
źródło

Odpowiedzi:

8

Proste rozwiązanie wykorzystujące bash:

function scroll
{
    while read -r ; do echo "$REPLY" ; sleep ${1:-0.5} ; done
}

Stosowanie

long_command | scroll [delay]

delayjest opcjonalny i domyślnie ustawiony na 0.5.

Wyjdź za pomocą Ctrl+C

Cyrus
źródło
1
Nie wiem, dlaczego moja edycja została odrzucona, ale ostrzegam, że echo /** w twoich wynikach komenda long_command (np. catPlik) utknie i zalej sesję terminalową, jeśli nie umieścisz podwójnych cudzysłowów "$REPLY".
林果 皞
1
@ 林果 皞 zatwierdził i usunął ostrzeżenie, dzięki. Powinienem był przede wszystkim dodać cytaty.
cyr
... Dodałem ostrzeżenie tylko dlatego, że system nie pozwala na edycję tylko 2 znaków.
林果 皞
4

Jeśli możesz żyć z rozdzielczością 1s, możesz to zrobić tail -n +0 -f -s <seconds>.

Nicole Hamilton
źródło
2
Dane wyjściowe long_commandsą prawdopodobnie generowane w mniej niż sekundę, więc nie ma sensu sondować ich kompletności za każdym razem <interval>i rzeczywiście nie działa dla mnie.
cyr
2

vimAby to osiągnąć, możesz użyć odpowiedniego mapowania:

vim -c 'map <S-f20> L:redraw<cr>:sleep 500m<cr><C-d><S-f20>' -c 'execute "normal \<S-f20>"' -

Ctrl-dprzewija pół strony na raz, zamień na, 10jaby przewijać 10 linii na raz.

Thor
źródło