Nehmen wir zum Beispiel an, ich habe einen Befehl git branch
(immer mit ein paar Worten).
Ich möchte verfolgen, wann dieser Befehl mit Argumenten ausgeführt wird. Wenn ich den Befehl beispielsweise git branch develop
fehlerfrei ausführe , möchte ich in develop
einer Datei speichern.
Ich habe versucht, den Git-Befehl auf meinem zu überschreiben, ungefähr .bash_profile
so:
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
Aber anscheinend funktioniert das nicht gut. Gibt es eine Möglichkeit, dies zu tun?
Antworten:
Sie haben hier ein paar Probleme:
git
Funktion ruft sich anstelle des ursprünglichengit
Befehls rekursiv auf .$@
nicht zitierte, was überhaupt keinen Sinn ergibtecho
für beliebige Daten .git
Befehls.~/.bash_profile
die Ihre Anmeldesitzung anpassen sollen, nicht Ihre Shell und normalerweise nicht von Nicht-Anmeldeaufrufen gelesen werdenbash
.Sie möchten so etwas wie:
Das ist:
command
, um dengit
Befehl auszuführen .git
in einer lokalen Variablen und geben Sie ihn beim Beenden zurück.>>
statt>
für die Umleitung in die Protokolldatei.printf
stattecho
.~/.bashrc
stattdessen in Ihre ein (stellen Sie sicher, dass Ihre~/.bash_profile
Beschaffung erfolgt,~/.bashrc
da Login-bash
Shells nicht~/.bashrc
standardmäßig gelesen werden (einbash
Fehler / eine Fehlfunktion)). Es sei denn, Sie möchten diesegit
Funktion (mitexport -f git
) exportieren, falls Sie auchbash
Skripte benötigengit
, die diese Funktion aufrufen.quelle
[ "$#" -eq 2 ]
gemäß seinem Beispiel ändern . Und es könnte eine gute Idee sein, das Datum auch zu "acked_parameters.txt "hinzuzufügen. Und ich würde mich für den allgemeinen Fall entscheiden (dh nicht nur die 2. Parameter verfolgen, wenn 2 Parameter, sondern alle Parameter verfolgen): Ich würde das Wenn loswerden und hätte :printf '%s: %s\n' "$(date '+%Y-%m-%dT%H:%M:%S')" "$0 $*"
? (dh zeigen Sie den Befehl + alle Parameter an (beachten Sie, dass Sie immer noch einige Informationen verlieren, z. B. welche Parameter Intra-Separatoren hatten, falls vorhanden). Tragbares Datum in der Nähe des iso8601-Standards)