Chcę łatwo ustawić alias git-go
dla tej linii terminalu:
git commit -m "init "; git push; git status
Więc kiedy wejdę do git-go, ta linia powinna wejść.
Jak mogę to zrobić? Odpowiedzi, które widziałem, obejmują tylko alias polecenia bez parametrów. Ale chcę ustawić alias do dowolnej linii terminalu.
command-line
bash
alias
Philip Rego
źródło
źródło
Odpowiedzi:
Robisz to tak samo, jak ustawiasz dowolny alias.
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 pogit 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
:Lub możesz uruchomić go z argumentami, które chcesz przekazać
git status
. Na przykład po uruchomieniu w ten sposób ostatnie polecenie togit-status --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: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 .
źródło
git-go
PATH igit go
będzie działać.Możesz zadeklarować, że jest to funkcja w twoim
~/.bash_aliases
pliku tak:lub możesz utworzyć alias w tym samym pliku w następujący sposób:
Nie zapomnij ponownie otworzyć terminala lub źródła pliku (
. ~/.bash_aliases
) po zmianie.źródło
Podczas pracy z
git
poleceniami możesz także znać składnię dodawania aliasu, szczególnie dlagit
:Spowoduje to dodanie nowego aliasu do
git
konfiguracji lokalnej (at~/.gitconfig
) i umożliwi wydaniegdy jest w
git
repozytorium. Przy każdym uruchomieniugit go
wywoływana jest powłoka, a poleceniegit commit -m "init"; git push; git status
jest do niej przekazywane.Więcej informacji można znaleźć w dokumentacji git .
źródło
To był problem z cytowaniem. Próbowałem tego:
Ale dostałem ten błąd:
Wystąpił ten błąd, ponieważ nieprawidłowo korzystałem z zagnieżdżonych cudzysłowów. Oto poprawna składnia:
Lub:
Lub bez cudzysłowów, jeśli w komunikacie zatwierdzenia nie ma białych znaków:
źródło
init
; traktuje powłoki'init'
,"init"
iinit
to samo. (Więc możesz chcieć cofnąć oryginalną wersję, a także pokazać nową wersję, aby zilustrować sytuację, w której potrzebne są zagnieżdżone cudzysłowy.) Jeśli chodzi o możliwość dodania reszty wiadomości, możesz przekazać ją jako wiersz polecenia argument, jeśli (jak pokazano w odpowiedziach Videonauth i moich) zdefiniowałeś funkcję zamiast aliasu. Na przykład możesz zdefiniowaćgit-go() { git commit -m "init $1"; git push; git status; }
(co mam w mojej odpowiedzi, ale"init $1"
zamiast po prostu"$1"
).