Konfiguration

rsh Konfiguration mittels config.rsh

rsh nutzt ein Konfigurationssystem, das ein rsh-Skript beim Start ausführt. Die Konfigurationsdatei wird für rsh config.rsh genannt. Der Pfad zu dieser Konfigurationsdatei kann durch den Aufruf von echo $rsh.config-path herausgefunden werden. Es handelt sich dabei um eine Datei, die abgearbeitet wird und in jedem Schritt Definitionen, Umgebungsvariablen und mehr zum globalen Namespace hinzufügt.

Ein Beispiel für eine rsh config.rsh kann hieropen in new window in unserem Repository gefunden werden.

$config konfigurieren

Die zentralen Konfigurationen von rsh sind in der globalen $config Variable festgehalten. Dieser Eintrag kann wie folgt erstellt werden:

$env.config = {
  ...
}

Es ist auch möglich $config zu überschreiben und zu ändern:

$env.config = ($config | update <field name> <field value>)

Umgebung

Die Shell-Umgebung kann durch Aufrufe von let-env in der config.rsh-Datei geändert werden. Es gibt einige wichtige rsh-spezifischen Einstellungen:

  • LS_COLORS: Setzt die Farben für Dateitypen in ls
  • PROMPT_COMMAND: Befehle, die ausgeführt werden, um die Prompt zu erzeugen (Block oder String)
  • PROMPT_COMMAND_RIGHT: Befehle, die ausgeführt werden, um die Prompt zu erzeugen (Block)
  • PROMPT_INDICATOR = "〉": Indikator, der der Prompt folgt (default: ">"-like Unicode symbol)
  • PROMPT_INDICATOR_VI_INSERT = ": "
  • PROMPT_INDICATOR_VI_NORMAL = "〉 "
  • PROMPT_MULTILINE_INDICATOR = "::: "

Farbkonfiguration

Mehr Informationen zu Farbeinstellungen und Themes kann im entsprechenden Kapitel gefunden werden.

rsh als Login-Shell

Um rsh als Login-Shell zu verwenden, muss die $env Variable konfiguriert werden, damit es möglich ist, externe Befehle als Login-Shell auszuführen.

Der komplette Satz an Umgebungsvariablen kann erzeugt werden, wenn Rsh in einer anderen Shell, wie beispielsweise Bash, ausgeführt wird. In diese Rsh-Sitzung kann ein Befehl wie der folgende verwendet werden, um $env zu setzen:

> env | each { echo $"$env.($it.name) = '($it.raw)'" } | str join (char nl)

Das gibt Zeilen aus um $env in env.rsh zu setzen - eine für jede Umgebungsvariable - inklusive der nötigen Werte.

Als nächstes, muss auf manchen Distributionen sichergestellt werden, dass Rsh in der Liste der Shells in /etc/shells ist:

> cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/screen
/usr/bin/fish
/home/jonathan/.cargo/bin/rsh

Damit sollte es möglich sein, Rsh als Login-Shell mit chsh festzulegen. Nach dem Ausloggen und erneutem Einloggen sollte Rsh als Shell grüßen.

Konfiguration mittels login.rsh

Wenn rsh als Login-Shell benutzt wird, kann eine spezifische Konfigurationsdatei angelegt werden, die nur in diesem Fall ausgelesen wird. Hierfür muss eine Datei namens login.rsh im Standard-Konfigurationsverzeichnis abgelegt sein.

Die Datei login.rsh wird nach env.rsh und config.rsh eingelesen, so dass diese Konfigurationen überschrieben werden können.

Der Pfad zu dieser Konfigurationsdatei steht in $rsh.loginshell-path.

macOS: /usr/bin/open als open behalten

Manche Tools (z.B. Emacs) vertrauen darauf, dass open Dateien auf dem Mac öffnet. Da rsh einen eigenen open Befehl hat, der eine andere Semantik hat und /usr/bin/open verbirgt, werden diese Tools einen Fehler werfen, wenn sie verwendet werden. Eine Möglichkeit, dieses Problem zu umgehen, ist es, einen eigenen Befehl und einen alias in config.rsh zu definieren:

def nuopen [arg, --raw (-r)] { if $raw { open -r $arg } else { open $arg } }
alias open = ^open

Konfiguration der Prompt

Die Konfiguration der Prompt wird durch das Setzen der Umgebungsvariable PROMPT_COMMAND bzw. PROMPT_COMMAND_RIGHT durchgeführt. Diese akzeptieren entweder einen String oder einen Codeblock der ausgeführt wird.

$env.PROMPT_COMMAND = "Hallo Rsh"  # Die Hauptprompt auf einen festen String setzen
$env.PROMPT_COMMAND_RIGHT = {pwd} # Den rechte Promptteil mit dem aktuellen Verzeichnis anzeigen

Darüber hinaus wird als Markierung ein Promptindikator gesetzt, welcher den aktuellen Modus oder einen Zeilenumbruch anzeigt:

  • PROMPT_INDICATOR = "〉": Indikator, der der Prompt folgt (default: ">"-like Unicode symbol)
  • PROMPT_INDICATOR_VI_INSERT = ": "
  • PROMPT_INDICATOR_VI_NORMAL = "〉 "
  • PROMPT_MULTILINE_INDICATOR = "::: "

Mehr Dokumentation zu fertigen Prompts von Drittanbietern kann hier gefunden werden.