Wie definiere ich globale Funktionen in zsh (macOS), die in Skripten verfügbar sind?

Wie definiere ich globale Funktionen in zsh (macOS), die in Skripten verfügbar sind?

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 RocketNutsdie 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 ~/myfunctionsund 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 ~/.zshrcoder ~/.zshenvhinzu:

fpath=( ~/myfunctions "${fpath[@]}" )
autoload -Uz greet

Keine dieser Methoden macht die greetFunktion jedoch in Skripten verfügbar.

Von der Shell aus funktionieren sie alle einwandfrei. Mit beiden Methoden kann ich die greetFunktion 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?

verwandte Informationen