Powiedzmy, że mam na przykład polecenie git branch
(zawsze z kilkoma słowami).
Chcę śledzić, kiedy to polecenie jest wykonywane z argumentami. Na przykład, jeśli wykonam polecenie git branch develop
bez błędów, chcę zapisać develop
plik.
Próbowałem zastąpić polecenie git na moim .bash_profile
, coś takiego:
git () {
if [ $# -eq 3 ]
then
git $@
echo $2 > /path/tacked_parameters.txt
else
git $@
fi
}
Ale wydaje się, że to nie działa dobrze. Czy jest na to sposób?
Odpowiedzi:
Masz tutaj kilka problemów:
git
funkcja wywołuje się rekurencyjnie zamiast oryginalnejgit
komendy.$@
cudzysłowu, co nie ma żadnego sensuecho
z dowolnych danych .git
polecenia.~/.bash_profile
które mają na celu dostosowanie sesji logowania, a nie powłoki i zwykle nie są odczytywane przezbash
wywołania niezalogowane.Chcesz coś takiego:
To jest:
command
aby uruchomićgit
polecenie ,git
w zmiennych lokalnych i zwróć go przy wyjściu,>>
zamiast>
do przekierowania do pliku dziennika.printf
zamiastecho
.~/.bashrc
zamiast tego umieść to w swoim katalogu (upewniając się, że~/.bash_profile
pozyskujesz,~/.bashrc
ponieważbash
powłoki logowania~/.bashrc
domyślnie nie czytają (bash
błąd / błąd). Chyba że chcesz wyeksportować tęgit
funkcję (zexport -f git
) w przypadku, gdy chcesz takżebash
skryptówgit
wywołujących tę funkcję.źródło
[ "$#" -eq 2 ]
, zgodnie z jego przykładem. Dobrym pomysłem może być także dodanie daty do „tacked_parameters.txt”. I pójdę za ogólnym przypadku (czyli nie tylko śledzić z 2. parametrów przy 2 parametry, ale śledzić wszelkie parametry): Chciałbym pozbyć się wtedy i posiadają:printf '%s: %s\n' "$(date '+%Y-%m-%dT%H:%M:%S')" "$0 $*"
? (tzn. pokaż polecenie + wszystkie parametry (zauważ, że wciąż tracisz informacje, na przykład, który parametr miał intra-separatory, jeśli taki istnieje). Przenośna data zbliżona do standardu iso8601)