Und sag nicht " $TERM
" - es ist immer xterm
.
Wie kann ein bash
Skript feststellen, in welchem Terminal es ausgeführt wird, insbesondere ob es sich um iTerm, Terminal.app oder tatsächlich um ein xterm handelt?
Ich frage, weil reset
es auf Terminal.app und iTerm2 nicht sofort funktioniert¹. iTerm2 erkennt jedoch eine Escape-Sequenz für einen Terminal-Reset ( \x1b]50;ClearScrollback\x07
), und wenn ich sie erkennen könnte, könnte ich sie reset
mit einem Alias überschreiben , der das Richtige tut. AFAICT, Terminal.app fehlt eine Reset-Sequenz, und die Leute greifen auf lächerliche Tom-Hackery zurück, um das zu umgehen .
Mein Endziel hier ist es, dass reset
ich genauso arbeite, egal ob ich unter OS X oder Linux arbeite, lokal oder remote über SSH. (Ich möchte nicht versuchen müssen, mich an welche zu erinnern, und es ist nützlich, reset && command-that-outputs-a-bunch
Up-Enter-Arbeiten auszuführen.) Terminal.app und iTerm werfen einen Schraubenschlüssel in diesen Plan, indem sie nicht reset
korrekt implementiert werden.
Das bedeutet, dass das einfache Überschreiben reset
nicht ganz gnome-terminal
das Richtige ist: Wenn ich auf einem Linux-Computer bin, muss es wissen, ob ich oder iTerm verwende, um die richtige Escape-Sequenz zu senden.
Gibt es eine Möglichkeit (auch wenn ich eine brauche ioctl
), das Terminal zu fragen, was es wirklich ist?
¹Für die Zwecke dieser Frage sollte durch Zurücksetzen der Bildschirm gelöscht, der Cursor zurückgesetzt und der Bildlaufpuffer gelöscht werden.
reset
, da meine Finger das wissen.
reset
Befehl den Scrollback-Inhalt des Terminalemulators löscht. Dies ist jedoch nicht garantiert, da das Scrollback eine Terminalemulator-spezifische Funktion ist, nicht wirklich eine Teil eines Terminals. Terminal unterstützt jedoch eine Erweiterung der ED-Escape-Sequenz (Erase in Display), um das Zurückblättern zu löschen ESC [ 3 J
. Sie können den Bildschirm löschen und dann verwenden, z. B.reset && printf '\e[3J’
xterm
(durch TERM=xterm
) deklarieren, würde ich erwarten, dass Sie eine Obermenge des XTerm emulieren, die beim Zurücksetzen den Scrollback löscht. (Als ob Sie die Escape-Sequenz für "blau" gesendet hätten, würden Sie blau erwarten.) Zugegeben, mein xterm sagt mir das Erase is backspace.
, was ich dankbar bin, dass nichts anderes tut; das ist nur nervig
Terminal.app
die Einstellungen und die Registerkarte "Terminal" öffnen und die Bildlaufzeilen auf 0 setzen? Deaktiviert das jeglichen Text über der aktuellen Zeile oder nur irgendetwas über dem oberen Bildschirmrand? Ich weiß, es ist nicht genau das, wonach Sie gefragt haben, einen Versuch wert.