Wyczyść połowę ekranu z wiersza poleceń

11

Czy jest jakiś sposób wyczyść terminal, ale zamiast pozostawiać monit na górze ekranu, pozostawia go na środku? Wygląda na to, że w clearzasadzie ignoruje wszystkie parametry wiersza polecenia.

Myślałem, że będzie na to sposób, tputale nie mogę go znaleźć.

fizzyh2o
źródło

Odpowiedzi:

12

Możesz użyć, tputaby przesunąć kursor do danej linii na ekranie, np.

tput cup 11 0

aby przenieść go do dwunastej linii (wartości liczą od zera).

Wzdłuż tych samych linii możesz użyć tputdo wyczyszczenia z tej pozycji do końca ekranu, korzystając z edmożliwości. Łączenie,

tput cup 11 0 && tput ed

może być tym, czego chciał.

Jeśli chcesz przejść do znacznika połowy ekranu, pierwszy numer jest zwracany przez

stty size

jest (w większości systemów) liczbą rzędów ekranu. Dodanie tego do polecenia:

tput cup $(stty size|awk '{print int($1/2);}') 0 && tput ed

W clearróżni się od programu tput ed:

  • przemieszcza się kursor na głównej pozycji (górny lewy) i
  • usuwa się z tego punktu na koniec ekranu.

Uwaga: na niektórych platformach tput edmoże nie działać z powodu problemów rozwiązanych dawno temu. W takich przypadkach aktualizacja konfiguracji curses / ncurses rozwiąże problem.

Thomas Dickey
źródło
w unixie nie usuwa to tekstu, ale porusza kursorem
James Owers
1
Brzmi jak błąd naprawiony dziesięć lat temu. Może czas na ulepszenia.
Thomas Dickey,
0

Jeśli liczba wierszy jest nieparzysta, tput cupusuwa całą stronę.
napisanie tego w ten sposób powinno naprawić:

tput cup $(($(stty size|awk '{print $1}')/2)) 0 && tput ed
Farzad Sadeghi
źródło
-1

Jeśli chcesz wyczyścić dolną połowę ekranu, zachowując resztę, zadziała to:

half=$(stty size | awk '{print int($1/2)-1;}'); for i in `seq ${half}`; do echo '' ; done && tput cup ${half} 0 && tput ed

EDYCJA: Aby wyjaśnić, jeśli uruchomisz seq $(stty size | cut -d' ' -f1)inne odpowiedzi, opuścisz pierwszą połowę wyniku, podczas gdy to polecenie opuści drugą połowę (tj. Najnowszą odpowiedź).

GjjvdBurg
źródło