/ / Funktionen ausf├╝hren, die au├čerhalb meines Shell-Skripts deklariert wurden - Shell-Skript, zsh

Ausf├╝hren von Funktionen, die au├čerhalb meines Shell-Skripts deklariert wurden - Shell-Skript, zsh

Gegenw├Ąrtig hat mein ZSH einige Quellenfunktionen, zum Beispiel:

% declare -f
... a lot of shell functions appears here.

Ich schreibe gerade ein Shell-Skript, das eine bestimmte Funktion aus dieser Liste aufruft (prompt_dir aus dem Powerlevel9k-Theme f├╝r Oh-My-Zsh).

Mein Drehbuch lautet:

#!/bin/zsh
echo_prompt_segment(){
# bunch of source-code here
}

zsh_oddeven_dir(){
prompt_dir echo
}

zsh_oddeven_dir

Problem ist, dass mein Skript nicht auf diese Funktionen zugreifen kann:

% ./oddeven-pwd.sh
zsh_oddeven_dir:1: command not found: prompt_dir

Wenn ich es tue declare -f Innerhalb des Skripts gibt es nur die beiden Funktionen, die sich in meinem Skript befinden:

% ./oddeven-pwd.sh
echo_prompt_segment () {

}
zsh_oddeven_dir () {
declare -f
}

Kann ich auf die Funktionen zugreifen und sie ausf├╝hren, die ├╝ber meinem Skript deklariert wurden? Wenn das so ist, wie?

Antworten:

1 f├╝r Antwort Ôäľ 1

Da Skripte standardm├Ą├čig in Subshells ausgef├╝hrt werden, sind die von Ihnen ben├Âtigten Funktionen in exportiert bash, aber nicht in zsh.

Im bash Der Standardbereich zum Hinzuf├╝gen von Benutzerfunktionen befindet sich in ~/.bashrcDies wird jedoch nur ausgef├╝hrt, wenn bash ist interaktiv (insbesondere nicht in einer Subshell, in der ein Skript ausgef├╝hrt wird), wodurch exportierte Funktionen ├╝berwunden werden.

Was scheint zu funktionieren, nach diese Antwort, soll Ihre Funktionsdeklarationen in setzen ~/.zshenv, die standardm├Ą├čig bei jedem Start ausgef├╝hrt wird, interaktiv oder nicht.

Sie sollten sich auch die vorherige (akzeptierte) Antwort ansehen, die unter anderem den Grund daf├╝r erkl├Ąrt zsh unterst├╝tzt keine exportierten Funktionen.