Nächste: Geplante Auftragsausführung durch Benutzer, Vorige: Essenzielle Persönliche Dienste, Nach oben: Persönliche Dienste [Inhalt][Index]
Shells spielen eine ziemlich wichtige Rolle bei der Initialisierung der Umgebung. Sie können Ihre Shells selbst einrichten, wie im Abschnitt Shell-Konfiguration beschrieben, aber empfehlen tun wir, dass Sie die folgend aufgeführten Dienste benutzen. Das ist sowohl leichter als auch zuverlässiger.
Jede Persönliche Umgebung instanziiert
home-shell-profile-service-type
, was eine Datei ~/.profile
erzeugt, die von allen POSIX-kompatiblen Shells geladen wird. In der Datei
sind alle Schritte enthalten, die nötig sind, um die Umgebung ordnungsgemäß
zu initialisieren. Allerdings bevorzugen viele moderne Shells wie Bash oder
Zsh, ihre eigenen Dateien beim Starten zu laden. Darum brauchen wir für
diese jeweils einen Persönlichen Dienst (home-bash-service-type
und
home-zsh-service-type
), um dafür zu sorgen, dass ~/.profile
durch ~/.bash_profile bzw. ~/.zprofile gesourcet werden.
Verfügbare home-shell-profile-configuration
-Felder sind:
profile
(Vorgabe: '()
) (Typ: Konfigurationstexte)Ein home-shell-profile
-Dienst wird durch die Persönliche Umgebung
automatisch instanziiert. Legen Sie den Dienst also bloß nicht
manuell an; Sie können ihn lediglich erweitern. Für profile
wird eine
Liste dateiartiger Objekte erwartet, die in die Datei ~/.profile
aufgenommen werden. Nach Vorgabe enthält ~/.profile nur den Code zur
Initialisierung, der von Login-Shells ausgeführt werden muss, um die
Persönliche Umgebung für den Benutzer verfügbar zu machen. Andere Befehle
können hier auch in die Datei eingefügt werden, wenn sie wirklich unbedingt
dort stehen müssen. In den meisten Fällen schreibt man sie besser in die
Konfigurationsdateien der Shell, wenn man eigene Anpassungen
wünscht. Erweitern Sie den home-shell-profile
-Dienst nur dann, wenn
Sie wissen, was Sie tun.
Verfügbare home-bash-configuration
-Felder sind:
package
(Vorgabe: bash
) (Typ: „package“)Das Bash-Paket, was benutzt werden soll.
guix-defaults?
(Vorgabe: #t
) (Typ: Boolescher-Ausdruck)Ob vernünftige Voreinstellungen an den Anfang der Datei .bashrc
angefügt werden sollen, wie /etc/bashrc zu lesen und die Ausgaben von
ls
einzufärben.
environment-variables
(Vorgabe: '()
) (Typ: Assoziative-Liste)Eine assoziative Liste der Umgebungsvariablen, die für die Bash-Sitzung
gesetzt sein sollen. Dieselben Regeln wie für den
home-environment-variables-service-type
gelten auch hier (siehe
Essenzielle Persönliche Dienste). Der Inhalt dieses Felds wird anschließend an
das, was im bash-profile
-Feld steht, angefügt.
aliases
(Vorgabe: '()
) (Typ: Assoziative-Liste)Assoziative Liste der Alias-Namen, welche für die Bash-Sitzung eingerichtet
werden sollen. Die Alias-Namen werden nach dem Inhalt des
bashrc
-Feldes in der Datei .bashrc definiert. Jeder Alias-Name
steht automatisch in Anführungszeichen, d.h. ein Eintrag wie:
'(("ls" . "ls -alF"))
wird zu
alias ls="ls -alF"
bash-profile
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die in .bash_profile eingefügt werden. Damit können benutzereigene Befehle beim Start der Login-Shell ausgeführt werden. (In der Regel handelt es sich um die Shell, die gestartet wird, direkt nachdem man sich auf der Konsole (TTY) anmeldet.) .bash_login wird niemals gelesen, weil .bash_profile immer existiert.
bashrc
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die in .bashrc eingefügt
werden. Damit können benutzereigene Befehle beim Start einer interaktiven
Shell ausgeführt werden. (Interaktive Shells sind Shells für interaktive
Nutzung, die man startet, indem man bash
eintippt oder die durch
Terminal-Anwendungen oder andere Programme gestartet werden.)
bash-logout
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die zu .bash_logout hinzugefügt werden. Damit können benutzereigene Befehle beim Verlassen der Login-Shell ausgeführt werden. Die Datei wird in manchen Fällen nicht gelesen (wenn die Shell zum Beispiel durch exec eines anderen Prozesses terminiert).
Sie können den Bash-Dienst mit Hilfe einer Konfiguration im Verbundsobjekt
home-bash-extension
erweitern. Dessen Felder spiegeln meistens die
von home-bash-configuration
(siehe
home-bash-configuration). Die Inhalte der Erweiterungen werden ans
Ende der zugehörigen Bash-Konfigurationsdateien angehängt (siehe Bash
Startup Files in Referenzhandbuch von GNU Bash.
Zum Beispiel können Sie so einen Dienst definieren, der den Bash-Dienst
erweitert, um in ~/.bash_profile eine weitere Umgebungsvariable
PS1
definieren zu lassen:
(define bash-tolle-eingabeaufforderung-service
(simple-service 'bash-tolle-eingabeaufforderung
home-bash-service-type
(home-bash-extension
(environment-variables
'(("PS1" . "\\u \\wλ "))))))
Den Dienst bash-tolle-eingabeaufforderung-service
würden Sie
anschließend ins services
-Feld im home-environment
Ihrer
Persönlichen Umgebung eintragen. Nun folgt die Referenz zu
home-bash-extension
.
Verfügbare home-bash-extension
-Felder sind:
environment-variables
(Vorgabe: '()
) (Typ: Assoziative-Liste)Zusätzliche Umgebungsvariable, die festgelegt werden sollen. Diese werden mit den Umgebungsvariablen anderer Erweiterungen und denen des zugrunde liegenden Dienstes zu einem zusammenhängenden Block aus Umgebungsvariablen vereint.
aliases
(Vorgabe: '()
) (Typ: Assoziative-Liste)Zusätzliche Alias-Namen, die festgelegt werden sollen. Diese werden mit den Alias-Namen anderer Erweiterungen und denen des zugrunde liegenden Dienstes zusammengelegt.
bash-profile
(Vorgabe: '()
) (Typ: Konfigurationstexte)Zusätzliche Textblöcke, die zu .bash_profile hinzugefügt werden sollen. Diese werden zu den Textblöcken anderer Erweiterungen und denen des zugrunde liegenden Dienstes hinzugenommen.
bashrc
(Vorgabe: '()
) (Typ: Konfigurationstexte)Zusätzliche Textblöcke, die zu .bashrc hinzugefügt werden sollen. Diese werden zu den Textblöcken anderer Erweiterungen und denen des zugrunde liegenden Dienstes hinzugenommen.
bash-logout
(Vorgabe: '()
) (Typ: Konfigurationstexte)Zusätzliche Textblöcke, die zu .bash_logout hinzugefügt werden sollen. Diese werden zu den Textblöcken anderer Erweiterungen und denen des zugrunde liegenden Dienstes hinzugenommen.
Verfügbare home-zsh-configuration
-Felder sind:
package
(Vorgabe: zsh
) (Typ: „package“)Das zu benutzende Zsh-Paket.
xdg-flavor?
(Vorgabe: #t
) (Typ: Boolescher-Ausdruck)Ob alle Konfigurationsdateien in $XDG_CONFIG_HOME/zsh platziert
werden sollen. Auch wird ~/.zshenv dann ZDOTDIR
auf
$XDG_CONFIG_HOME/zsh festlegen. Der Startvorgang der Shell wird mit
$XDG_CONFIG_HOME/zsh/.zshenv fortgeführt.
environment-variables
(Vorgabe: '()
) (Typ: Assoziative-Liste)Eine assoziative Liste, welche Umgebungsvariable in der Zsh-Sitzung festgelegt sein sollen.
zshenv
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die zu .zshenv hinzugefügt
werden. Damit können benutzereigene Shell-Umgebungsvariable festgelegt
werden. Enthaltene Befehle dürfen kein vorhandenes TTY voraussetzen
und sie dürfen nichts ausgeben. Die Datei wird immer gelesen. Sie
wird vor jeder anderen Datei in ZDOTDIR
gelesen.
zprofile
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die in .zprofile eingefügt werden. Damit können benutzereigene Befehle beim Start der Login-Shell ausgeführt werden. (In der Regel handelt es sich um die Shell, die gestartet wird, direkt nachdem man sich auf der Konsole (TTY) anmeldet.) .zprofile wird vor .zlogin gelesen.
zshrc
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die in .zshrc eingefügt
werden. Damit können benutzereigene Befehle beim Start einer interaktiven
Shell ausgeführt werden. (Interaktive Shells sind Shells für interaktive
Nutzung, die man startet, indem man zsh
eintippt oder die durch
Terminal-Anwendungen oder andere Programme gestartet werden.)
zlogin
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die in .zlogin eingefügt werden. Damit können benutzereigene Befehle am Ende des Startvorgangs der Login-Shell ausgeführt werden.
zlogout
(Vorgabe: '()
) (Typ: Konfigurationstexte)Eine Liste dateiartiger Objekte, die zu .zlogout hinzugefügt werden. Damit können benutzereigene Befehle beim Verlassen der Login-Shell ausgeführt werden. Die Datei wird in manchen Fällen nicht gelesen (wenn die Shell zum Beispiel durch exec eines anderen Prozesses terminiert).
Das GNU-Readline-Paket enthält Bearbeitungsmodi, um damit wie in Emacs oder vi
zu arbeiten. Die Einstellungen dazu stehen in der Datei
~/.inputrc. Mit dem Modul gnu home services shells
können Sie
diese Einstellungen auf vorhersehbare Weise vornehmen, wie folgt. Für
weitere Informationen, wie die Konfiguration in der Datei ~/.inputrc
aussehen muss, siehe Readline Init File in GNU Readline.
Mit einem Dienst dieses Typs kann man verschiedene Einstellungen an .inputrc vornehmen. Die Einstellungen in .inputrc werden von allen Programmen gelesen, die mit GNU Readline gebunden werden.
Hier sehen Sie ein Beispiel, wie so ein Dienst aussehen und konfiguriert
werden kann, wenn Sie ihn im services
-Feld innerhalb von
home-environment
in Ihrer Persönlichen Konfiguration eintragen:
(service home-inputrc-service-type
(home-inputrc-configuration
(key-bindings
`(("Control-l" . "clear-screen")))
(variables
`(("bell-style" . "visible")
("colored-completion-prefix" . #t)
("editing-mode" . "vi")
("show-mode-in-prompt" . #t)))
(conditional-constructs
`(("$if mode=vi" .
,(home-inputrc-configuration
(variables
`(("colored-stats" . #t)
("enable-bracketed-paste" . #t)))))
("$else" .
,(home-inputrc-configuration
(variables
`(("show-all-if-ambiguous" . #t)))))
("endif" . #t)
("$include" . "/etc/inputrc")
("$include" . ,(file-append
(specification->package "readline")
"/etc/inputrc"))))))
Im Beispiel oben werden zunächst key-bindings
und variables
eingestellt. In conditional-constructs
wird gezeigt, wie man bedingte
Anweisungen benutzt und weitere Dateien einbindet. Im obigen Beispiel wird
colored-stats
nur aktiviert, wenn der Bearbeitungsmodus auf
vi
-Stil steht. Außerdem werden weitere Einstellungen aus
/etc/inputrc oder aus /gnu/store/…-readline/etc/inputrc
geladen.
Mit einer home-inputrc-service-type
-Instanz des Dienstes muss ein
home-inputrc-configuration
-Verbundsobjekt assoziiert werden; die
Beschreibung folgt nun.
Verfügbare home-inputrc-configuration
-Felder sind:
key-bindings
(Vorgabe: '()
) (Typ: Assoziative-Liste)Eine assoziative Liste von Tastenbelegungen für Readline, die in die Datei ~/.inputrc geschrieben werden.
'((\"Control-l\" . \"clear-screen\"))
wird zu
Control-l: clear-screen
variables
(Vorgabe: '()
) (Typ: Assoziative-Liste)Eine assoziative Liste zu setzender Readline-Variabler.
'((\"bell-style\" . \"visible\") (\"colored-completion-prefix\" . #t))
wird zu
set bell-style visible set colored-completion-prefix on
conditional-constructs
(Vorgabe: '()
) (Typ: Assoziative-Liste)Eine assoziative Liste von bedingten Ausdrücken, die in der
Initialisierungsdatei stehen sollen. Dazu gehören $if
,
else
, endif
und include
, die als Wert eine
weitere home-inputrc-configuration
bekommen.
(conditional-constructs
`((\"$if mode=vi\" .
,(home-inputrc-configuration
(variables
`((\"show-mode-in-prompt\" . #t)))))
(\"$else\" .
,(home-inputrc-configuration
(key-bindings
`((\"Control-l\" . \"clear-screen\")))))
(\"$endif\" . #t)))
wird zu
$if mode=vi set show-mode-in-prompt on $else Control-l: clear-screen $endif
extra-content
(Vorgabe: ""
) (Typ: Konfigurationstext)Weiterer Text, der unverändert an die Konfigurationsdatei angehängt
wird. Führen Sie man readline
aus, um weitere Informationen über
all die Konfigurationsoptionen zu bekommen.
Nächste: Geplante Auftragsausführung durch Benutzer, Vorige: Essenzielle Persönliche Dienste, Nach oben: Persönliche Dienste [Inhalt][Index]