Ich generiere und registriere oft viele Bash-Funktionen, die viele der Aufgaben automatisieren, die ich normalerweise in meinen Entwicklungsprojekten erledige. Diese Generation hängt von den Metadaten des Projekts ab, an dem ich arbeite.
Ich möchte die Funktionen mit den Informationen des Projekts, das sie generiert haben, folgendermaßen versehen:
func1() {
# This function was generated for project: PROJECT1
echo "do my automation"
}
Im Idealfall kann ich den Kommentar sehen, wenn ich die Definition überprüfe:
$ type func1
func1 is a function
func1 ()
{
# This function was generated for project: PROJECT1
echo "do my automation"
}
Aber irgendwie scheint bash die Kommentare beim Laden der Funktion zu ignorieren, nicht beim Ausführen. Die Kommentare gehen also verloren und ich erhalte das folgende Ergebnis:
func1 is a function
func1 ()
{
echo "do my automation"
}
Gibt es eine Möglichkeit, Funktionen Metadaten zuzuweisen und diese anschließend zu überprüfen? Ist es möglich, es abzurufen, wenn die Definition mit Typ überprüft wird?
$1
ist-h
, und dannprintf
/echo
eine einzeilige Hilfe / Verwendung / was auch immer.Antworten:
quelle
Ja,
type
scheint nur die Teile einer Funktion auszudrucken, die ausgeführt werden sollen. Das scheint mir wirklich vernünftig zu sein, da das normalerweise alles ist, woran Sie interessiert sind, wenn Sie Fragen stellentype
.Um dieses Problem zu umgehen, fügen Sie anstelle von Kommentaren Ihre Metadaten wie folgt hinzu:
Es ist nicht erforderlich, diese Variable jemals tatsächlich zu verwenden, sie wird jedoch angezeigt, wenn die Funktion abgefragt wird mit
type
:quelle
Sie können die Verwendung nop builtin
:
. Außerdem müssen Sie es nicht als Variable speichern:BEARBEITEN : Achten Sie auf Sonderzeichen in Ihren Metadaten. Für reinen Text können Sie verwenden:
BEARBEITEN : Sie können stattdessen ein globales assoziatives Array verwenden, um alle Metadaten der Funktion zu speichern:
Auf diese Weise müssen Sie nicht die Ausgabe von
declare
oder analysierentype
, sondern nur den Schlüssel eines Arrays abfragen.quelle
your metadata here
kann Erweiterungen enthalten, die Nebenwirkungen haben. Verwenden Sie lieber einfache Anführungszeichen wie die Antwort von @ AlexP.Du kannst das.
quelle
(
können keine Sonderzeichen wie verwendet werden und das erste Wort sollte kein gültiger Befehl sein.