Warum zeigt GNU "less" nur die Ausgabe meines Titelskripts anstelle des Dateiinhalts an?

497
Ben Richards

Ich verwende csh als Terminal und ich habe ein Skript, das ausgeführt wird, wenn ich Verzeichnisse ändere, die den Fenstertitel durch das aktuelle Verzeichnis ersetzen. Ich habe es anfangs auch in meiner .cshrc- Datei ausgeführt, damit der Fenstertitel in einer neuen Shell geändert wird.

Wenn ich lesszum Anzeigen einer Textdatei in der Konsole anstelle des Dateiinhalts verwende, sehe ich die Ausgabe dieses Skripts. Dies macht effektiv lessnutzlos.

1

2 Antworten auf die Frage

1
Ben Richards

Gemäß diesen FAQs für weniger auf der Entwickler-Homepage stellt sich heraus, dass die Ausgabe von etwas .cshrcbeeinträchtigt werden kann, wenn die Ausgabe auf der Konsole generiert wird (was das Fenstertitelskript tut) less. lessRuft die Shell offenbar zum Öffnen und Anzeigen von Dateien auf, und da jede neue Instanz der Shell die Befehle automatisch ausführt, wird die .cshrcKonsolenausgabe, die in diesem Schritt auftritt, die Funktion des Tools beeinträchtigen.

Die Lösung besteht darin, den Aufruf meines Skripts aus der .cshrcDatei zu entfernen . Ich kann es in die .loginDatei einfügen, aber es gibt den Vorbehalt, dass ein neuer Aufruf der Shell die Befehle in dieser Datei nicht erneut ausführt.

1
Kevin Panko

Ihr Problem wird dadurch verursacht, dass die ~/.cshrcDatei Dinge an die Konsole ausgibt, die den Betrieb von beeinträchtigen less.

Eine Möglichkeit, dies zu lösen, besteht darin, nach interaktiven Shells zu suchen, bevor etwas unternommen wird, das Auswirkungen auf die Konsole hat oder die Art und Weise, in der Shell-Skripts ausgeführt werden, ändert (z. B. Aliasnamen setzen cd).

if ($?prompt) then # Do things that affect interactive shells here endif