Czy istnieje sposób, aby sprawić, że wyświetlana zawartość zniknie zaraz po tym, jak użytkownik wyrazi zgodę?
Na przykład weź ten plik poniżej
#!/bin/bash
read -n 1 -p 'how are you ? ' var
if [ "$var" == "y" ]
then
echo 'Have fun'
else
echo 'Go to Doctor'
fi
Jeśli to uruchomisz, wynikiem będzie
how are you ? yHave fun
Szukam czegoś, co pozwoli mi how are you ?
zniknąć, gdy tylko użytkownik naciśnie klawisz
A potem po zniknięciu wydrukuj Have fun
Chcę, aby ostatnie wyjście powyższego programu było tylko
Have fun
Uwaga: Nie należy również usuwać niczego powyżej tego skryptu, które jest drukowane na ekranie powłoki.
ja używam bash
clear
pomiędzyecho
nie jest opcją?clear
wyczyści wydruk, który jest już wydrukowany powyżej na ekranie, jeśli taki istnieje. @sebasthAre you fine
pochodzi? Czy nie powinno tak byćHow are you
?Odpowiedzi:
Możesz użyć:
(lub
printf '\r'
), aby przesunąć kursor na początek linii. Śledzony przez:aby usunąć wszystko do końca linii. (
tcsh
azsh
także miećechotc
wbudowane narzędzie, którego można używać ztermcap
odpowiednikiem tegoterminfo
el
:echotc ce
(równieżechoti el
wzsh
)źródło
Użyj znaku powrotu karetki (
\r
). Ten znak specjalny (pozostałość po czasach pisania maszyn do pisania) przeniesie kursor z powrotem na początek linii. Następnie potrzebujesz tyle spacji, ile wiadomość chcesz usunąć (spowoduje to nadpisanie wiadomości), a następnie drugi powrót karetki, aby wrócić do początku przed wydrukowaniem następnej wiadomości. Coś takiego:Uruchomienie powyższego skryptu:
źródło
\r
możesz wstawić wszystkie spacje między\rHave fun
i\n
.Można to zrobić na wiele sposobów, od idiotyzującego po elegancki.
Najbardziej niezawodną metodą (choć najbardziej pracującą) jest powtarzanie backspace, jednak tyle razy potrzeba. Działa to na wszystkich rodzajach oprócz teletypów (usuwanie atramentu z papieru to wyzwanie).
Następnie w górę skali znajdują się spacje powrotu karetki. Nie działa to w przypadku emulatorów terminali, które wstawiają wysuw linii przed lub po każdym powrocie karetki (jest to opcja minicom, a inne mogą być skonfigurowane tak).
Następnie są sztuczki specyficzne dla terminala, o których wspomnę tylko kody możliwości termcap, ponieważ bazy danych termcap i terminfo mogą pokazywać użycie. (Oto lista.)
Proste dla pojedynczej linii jest przejście do kolumny (ch), a następnie usunięcie do końca linii (ce).
W przypadku bardziej skomplikowanych przypadków, w tym odpowiedzi wieloliniowych, zapisano pozycję bezwzględną (sc), monit, odpowiedź odczytu, przywróć pozycję kursora (rc), wyczyść do końca ekranu (cd).
W większości przypadków można zakodować wartości vt100 dla dwóch ostatnich odpowiedzi, ponieważ większość emulatorów terminali jest z nim zgodna. Oczywiście nie wszystkie terminale obsługują te opcje, ale te, które nie są rzadkie i przestarzałe.
źródło