Es gibt tatsächlich zwei (Haupt-) Möglichkeiten, um dies zu erreichen:
Verwenden Befehl Substitution einen Befehl als Teil der Eingabeaufforderung
setopt promptsubst
PROMPT='Date %d Result $(a_command) '
promptsubst
muss sein, laufen aktiviert, ansonsten zsh
führt keine weiteren Erweiterungen, arithmetische Erweiterungen oder Befehlsersetzungen durch.
Der Eingabetext muss auch so notiert werden, dass die Erweiterungen nicht vorgenommen werden, wenn PROMPT
eingestellt wird. Also entweder steckte es in einfache Anführungszeichen oder, wenn Sie/doppelte Anführungszeichen verwenden möchten, prepend $
mit einem \
sie getrennt zu zitieren, wo nötig:
PROMPT="Date %d Result \$(a_command) Const $(another_command)"
Diese $(another_command)
erweitert wird, wenn PROMPT
Einstellung (so wird es laufen nur einmal und sein Ergebnis als dauerhaft ersetzt) und $(a_command)
jedes Mal, wenn die Eingabeaufforderung angezeigt wird.
Nutzen Sie die precmd
Funktion (oder Haken) und der psvar
Array:
autoload -Uz add-zsh-hook
a_function() {
psvar[1]=$(a_command)
}
two_function() {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result1 %v Result2 %2v '
- Wenn gesetzt, wird der
precmd
Funktion ausführen, kurz bevor die Eingabeaufforderung gedruckt wird. Sie können auch eine Liste von Funktionen festlegen, die im Array precmd_functions
ausgeführt werden sollen.
add-zsh-hook
bietet eine einfache Möglichkeit, Funktionen zu diesem Array hinzuzufügen.
%Nv
in der Eingabeaufforderung wird durch das N-te Element der psvar
-Array ersetzt. Wenn N
bleibt aus (%v
) N==1
angenommen (dies gilt auch für andere schnelle Token, die numerische Argumente)
Auf den ersten Blick das zweite Verfahren mehr weit sehen kann kompliziert dann nur promptsubst
verwenden. Dies ist jedoch nur bei sehr einfachen Substitutionen der Fall. Die Verwendung von precmd
ermöglicht die Verwendung komplexerer Funktionen, ohne die Definition von PROMPT
unlesbar zu machen, da mehrere Codezeilen in einem $()
zusammengefügt werden.
Sie können auch beide Ansätze kombinieren und die Verwendung von psvar
in einigen oder allen Fällen verzichten:
autoload -Uz add-zsh-hook
setopt promptsubst
a_function() {
a_parameter=$(a_command)
}
two_function() {
psvar[2]=$(two_command)
}
add-zsh-hook precmd a_function
add-zsh-hook precmd two_function
PROMPT='Date %d Result ${a_parameter} %2v'
Es gibt in der Regel keine Notwendigkeit, eine Schalen-Konfigurationsparameter zu exportieren. 'export' stellt einen Parameter für die Umgebung von Prozessen zur Verfügung, die später gestartet werden. – Adaephon