AllgemeinTipps & TricksWissen

Das Problem: clear(1)

Wer schonmal beim Arbeiten im USS das Terminal leeren wollte, hat möglicherweise folgendes erlebt:

$ clear
terminals database is inaccessible

Diese Fehlermeldung informiert darüber, dass die terminfo(5)-Datenbank nicht an auffindbar ist. Falls diese auf dem System vorhanden ist, sich jedoch nicht unter /usr/share/terminfo befindet, kann deren Pfad in der “TERMINFO“-Umgebungsvariable gesetzt werden. Damit wird folgendes erreicht:

$ TERMINFO=/…/terminfo clear
'/u/…': unknown terminal type.

Leider bringt das Setzen der TERM-Variable keinen weiteren Erfolg. Fazit: clear(1) führt zu Frustration. Die selben Probleme betreffen tput(1).

Die Lösung 1: /bin/clear

Je nach System sind eventuell mehrere Versionen von clear vorhanden, es lohnt sich, diese auszuprobieren. type, which, echo "$PATH" und find / -name clear können hilfreich sein.

Die Lösung 2: printf(1)

Eine ander Lösung bietet printf(1):

$ printf "\033[2J\033[1;1H"

Hiermit werden zwei CSI-Sequenzen an den Terminalemulator gesendet. Die erste leert den Bildschirm, die zweite positioniert den Cursor neu. Der Nachteil dieser Lösung ist die geringere Terminalkompatibilität, dies ist dank Terminalemulatoren jedoch vor allem theoretischer Natur.

Um clear(1) effektiv zu ersetzen lässt sich beispielsweise ein Alias in der ~/.bashrc anlegen:

$ ls -T .bashrc
t ISO8859-1 T=on .bashrc
$ cat .bashrc
alias clear='printf "\033[2J\033[1;1H"'

Damit auch ^L verwendet werden kann, kann .inputrc verwendet werden:

$ ls -T .inputrc
t ISO8859-1 T=on .inputrc
$ cat .inputrc
C-L: "clear\n"