Seit macOS 10.15 (Catalina) wurde die Standard-Shell von Bash auf Zsh geändert. Eines der Probleme, auf die ich stoße, ist, dass ich meine eigenen globalen Funktionen nicht zum Laufen bekomme. Früher habe ich diese aus .bash_profile exportiert, aber Zsh scheint das Konzept des Exportierens von Funktionen nicht zu kennen.
Angenommen, ich habe Folgendes:
function greet { echo "Hello $1, how are you today" }
Wenn ich dann hello RocketNuts
die Shell ausführe, steht dort Hello RocketNuts, how are you today
: So weit, so gut.
Jetzt möchte ich diese Funktion global machendamit es auch in Skripten verfügbar ist.
Ich habe versucht:
- es hineinlegen
.zshrc
- es hineinlegen
.zshenv
Ich habe auch versucht, ein Unterverzeichnis ~/myfunctions
und eine Datei mit dem Namen zu erstellen ~/myfunctions/greet
, die Folgendes enthält:
function greet { echo "Hello $1, how are you today" }
greet "$@"
und dann füge ich in entweder ~/.zshrc
oder ~/.zshenv
hinzu:
fpath=( ~/myfunctions "${fpath[@]}" )
autoload -Uz greet
Keine dieser Methoden macht die greet
Funktion jedoch in Skripten verfügbar.
Von der Shell aus funktionieren sie alle einwandfrei. Mit beiden Methoden kann ich die greet
Funktion manuell in der Shell aufrufen.
Wenn ich aber eine Datei habe test.sh
, die das tut greet Somebody
, und diese ausführe, kommt immer die Meldung „greet: Befehl nicht gefunden“.
Wie bekomme ich dies in zsh zum Laufen?