Robisz to tak samo, jak ustawiasz dowolny alias.
alias git-go='git commit -m "init "; git push; git status'
Sytuacja, w której staje się trudna, nie polega na tym , że alias uruchamia polecenie i przekazuje argumenty do tego polecenia, ani nawet gdy alias uruchamia wiele poleceń oddzielonych przez ;
, ale zamiast tego ma miejsce, gdy chcesz, aby alias akceptował i używał własnych argumentów wiersza polecenia .
Na przykład wszystko, co napiszesz po nazwie tego aliasu, zostanie wklejone na końcu, a zatem przekazane jako argumenty wiersza poleceń do trzeciego git
polecenia po git status
. (Naprawdę nie chodzi o to, że poniższy tekst jest wklejany na końcu, ale o to, że poniższy tekst jest pozostawiany sam, a nazwa aliasu jest zastępowana jego definicją.)
Możesz więc uruchomić swój alias bez argumentów, co działa, a ostatnia komenda to git status
:
git-go
Lub możesz uruchomić go z argumentami, które chcesz przekazać git status
. Na przykład po uruchomieniu w ten sposób ostatnie polecenie to git-status --show-stash
:
git-go --show-stash
To, czego nie można zrobić z aliasem w Bash (i innych powłokach typu Bourne'a), polega na tym, aby alias akceptował argumenty wiersza poleceń i umieszczał je gdzie indziej niż na końcu.
Załóżmy na przykład, że chcesz git-go
zaakceptować argument użyty dla komunikatu zatwierdzenia. Nie będziesz w stanie napisać tego jako aliasu. Rozwiązaniem byłoby napisanie go jako funkcji powłoki zamiast:
git-go() { git commit -m "$1"; git push; git status; }
W definicji funkcji powłoki, parametry pozycyjne $1
, $2
i tak dalej trzymać wartości argumentów wiersza poleceń przekazywanych do funkcji powłoki. Aliasy nie mają odpowiadającej temu funkcjonalności, ponieważ rozszerzenie aliasu jest tak naprawdę formą przetwarzania makr, które odbywa się bardzo wcześnie, gdy powłoka analizuje polecenie.
Możesz oczywiście napisać go jako funkcję powłoki, nawet jeśli nie musisz używać parametrów pozycyjnych w definicji, jak sugeruje Videonauth .