Laut diesem StackOverflow-Beitrag ist es möglich, eine farbige Eingabeaufforderung in KornShell zu haben. Ich konnte nicht herausfinden, wie das geht. Ich kann Farbe verwenden:
echo -e "\033[34mLinux\033[00m"
gibt eine blaue "Linux" -Ausgabe aus, ebenso wie:
printf "\033[34mLinux\033[00m"
Wenn ich jedoch die Escape-Codes in meine PS1
Eingabeaufforderungsvariable einbinde, werden sie nicht maskiert. Was muss ich tun, um eine farbige Eingabeaufforderung zu erhalten? Ich bin nicht nur ein Trottel für Eyecandy, sondern finde auch, dass eine farbige Eingabeaufforderung nützlich ist, wenn die Ausgabe visuell analysiert wird.
Sie müssen ein wörtliches Escapezeichen in die
PS1
Variable einfügen. Ksh88 und Klone wie pdksh und mksh (ältere Versionen) haben keine wörtliche Syntax für Steuerzeichen, außer über dieprint
integrierte. Mksh versteht\e
für Flucht, aber pdksh benötigt den Oktalcode\033
.ATT ksh93 führt die Backlash-
$'…'
Escape -Literal-Syntax ein (seit R39b auch in mksh verfügbar). Sie können Backslash-Escapezeichen verwenden, um Steuerzeichen in diese Literale einzufügen.quelle
mksh
unterstützt auch$'…'
- zugegebenermaßen, weil Dave Korn (der Korn in Korn Shell) darauf bestand, dass ich es hinzufüge.Ich benutze diese in
mksh
für einen Benutzershell
:& etwas anders
shell
fürroot
:Da die Sonderzeichen nicht kopiert wurden, finden Sie hier eine Pastebin-Paste für den normalen Benutzer und root.
quelle
In den Antworten der Menschen gehen verschiedene Dinge vor sich, die jeweils eine andere Syntax beinhalten.
Die Escape-Sequenzen für Ihr Terminalprogramm finden Sie in der Dokumentation.
So codieren Sie die Terminal-Escape-Sequenzen in der PS1-Variablen, z. B. \ e oder Literal-Escape. Dies hängt von der Shell ab.
Hinzufügen von Änderungsinformationen zur Eingabeaufforderung, z. B. Hostname, aktuelles Verzeichnis usw. Dies hängt auch von der Shell ab. Möglicherweise können Sie spezielle Backslash-Sequenzen wie \ w für das Arbeitsverzeichnis verwenden, oder Sie müssen möglicherweise Umgebungsvariablen benennen oder Befehlszeilen in die Zeichenfolge einbetten.
Wie man der Shell sagt, welche Zeichen gedruckt werden und welche nicht. Die Shell weiß nicht, wo Ihre Terminal-Escape-Sequenzen beginnen und enden. Wenn die Shell über einen Befehlszeileneditor oder ähnliches verfügt, muss sie wissen, welche Zeichen gedruckt werden, damit sie weiß, wo sich der Cursor befindet. Ohne dieses Detail sieht Ihre Eingabeaufforderung möglicherweise richtig aus, aber die Bearbeitung kann sich seltsam verhalten.
In bash setzen Sie \ [vor jeder Escape-Sequenz und \] danach.
In ksh wählen Sie ein einzelnes nicht druckbares ASCII-Zeichen aus, das an keiner anderen Stelle in der Zeichenfolge vorkommen kann. Am Anfang der Zeichenfolge schreiben Sie dieses Zeichen, gefolgt von einem ASCII-Wagenrücklauf. Dann schreiben Sie vor und nach jeder Escape-Sequenz das gleiche Zeichen. z3ntu wählte \ a als Markierungszeichen.
quelle
Dank früherer Antworten und anderer Quellen konnte ich Folgendes finden:
Korn Shell Eingabeaufforderung:
Bash-Eingabeaufforderung:
Diese geben die gleiche farbige Eingabeaufforderung (ja, ich spreche Englisch der Königin;)) im Format:
Das DOS-Äquivalent (obwohl es keine Farboptionen gibt) lautet:
was gibt:
Das ">" hält es mit "$" eher "DOSsy" als "nixy", aber wenn Sie stattdessen das Siegel ("$") möchten, dann wäre es:
Vorausgesetzt, Ihr Anmeldekonto verfügt über die erforderlichen Berechtigungen, damit die 'Nixies' ihnen permanent "Export" voranstellen:
und ändern Sie die DOSsy in:
oder
quelle