Gibt es eine Möglichkeit, eine Bash-Funktion im Sinne ihrer alten Definition neu zu definieren? Zum Beispiel möchte ich der Präambel der Funktion den folgenden Codeblock hinzufügen command_not_found_handle ()
:
# Check if $1 is instead a bash variable and print value if it is
local VAL=$(eval echo \"\$$1\")
if [ -n "$VAL" ] && [ $# -eq 1 ]; then
echo "$1=$VAL"
return $?
fi
Es ist derzeit in /etc/profile.d/PackageKit.sh definiert und wird von Bash-Startskripten bereitgestellt.
Auf diese Weise kann ich den Wert einer Umgebungsvariablen an der Eingabeaufforderung abfragen, indem ich einfach den Variablennamen eingebe (sofern kein solcher Befehl mit diesem Namen vorhanden ist). z.B
user@hostname ~:$ LANG
LANG=en_AU.utf8
Ich weiß, dass ich die aktuelle Definition einfach kopieren und einfügen und meine eigenen Änderungen hinzufügen kann ~/.bashrc
, aber ich suche nach einer eleganteren Methode, die die Wiederverwendung von Code beinhaltet.
Bessere Möglichkeiten zur Erreichung meines Ziels oder Verbesserungen / Erweiterungen des Codes werden ebenfalls geschätzt.
eval
können Sie die Indirektion verwenden:local VAL=$(echo ${!1})
Antworten:
Sie können die aktuelle Definition der Funktion ausdrucken und sie dann in eine Funktionsdefinition in einer
eval
Klausel aufnehmen.Ein weiterer Ansatz, den ich klarer finde, besteht darin, die ursprüngliche Funktion unter einem neuen Namen zu definieren und dies aus Ihrer Definition heraus aufzurufen. Dies funktioniert nur, wenn Sie nicht auf die lokalen Variablen der ursprünglichen Definition reagieren müssen.
quelle
declare -f
, aber ich mag die Art und Weise, wie Sie die ursprüngliche Funktion umbenennen.Danke @mat, @ dennis-williamson. Nachdem ich Ihre Kommentare gelesen habe, habe ich diese bekommen
Obwohl ich glaube, ich bevorzuge @Gilles-Lösung.
quelle