Większość moich aliasów ma tę postać: alias p='pwd'
Chcę alias git commit
, aby to zrobiłgit commit -v
Ale próba utworzenia aliasu ze spacją powoduje błąd:
$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name
Nie jest to bezpośrednia odpowiedź na twoje pytanie (aliasy mogą być tylko jednym słowem), ale git-config
zamiast tego powinieneś użyć :
git config --global alias.civ commit -v
Tworzy to alias git, który git civ
działa git commit -v
. Niestety, AFAIK nie ma możliwości zastąpienia istniejących poleceń git za pomocą aliasów . Jednak zawsze możesz wybrać odpowiedni alias, z którym chcesz żyć, jako alternatywę.
git config
niegit-config
git
komendy z pseudonimami, tylko z odrobiną skrypcie. (Nie zamieszczam tego komentarza jako krytyki, BTW. Ta odpowiedź została opublikowana prawie rok po twojej! Po prostu zamieszczam ją w nadziei, że ludzie mogą uznać ją za pomocną.)Mówisz o poleceniu zawierającym spację, ale tutaj jest to polecenie
git
i nie ma tam spacji.Aby wywołać polecenie git commit , musisz je napisać
Zasadniczo polecenia nie mają miejsca w nazwach z tego powodu, że kłopotliwe jest wywoływanie ich w powłoce, więc nie sądzę, abyś znalazł takie polecenie w swoim systemie.
csh, tcsh lub zsh pozwolą ci na alias dowolnego z powyższych, ale nie na bash ani ksh (chociaż pdksh pozwoli ci, ale nie pozwolisz na ich użycie). W Zsh:
Czyni
git command
polecenie (gdy jest wywoływane jako'git command'
(tylko z pojedynczymi cudzysłowami)) jako aliasgit
polecenia z argumentamicommit
i-v
. Chyba nie tego szukałeś.Ponieważ
alias
można aliasować tylko polecenia aliasu, jedyne , co możesz tutaj zrobić, togit
polecenie, a ty musisz go aliasować do czegoś, co wstawia „-v” po „commit” na liście argumentów. Najlepiej byłoby skorzystać z rozwiązania @ jw013, ale jeśli z jakiegoś powodu nie możesz lub nie chciałbyś, zamiast używać aliasu, możesz użyć funkcji do wykonania zadania:źródło
W Bash nie można utworzyć aliasu dla polecenia zawierającego dowolne spacje.
Jednak używam następującej funkcji w moim .bashrc jako obejście.
Jak to działa: Zaczynasz od polecenia, które chcesz wywołać. W moim przypadku tak jest
sudo
.Następnie wspominasz, jakie parametry by to zajęło. W tym wypadku
pacman -Syu
.Jeśli uruchomione, jakie polecenie powinno zostać wykonane? W powyższym stwierdzeniu tak jest
pacup.sh
.Innego, co komenda ma być wykonywana,
sudo $@
.$@
to, jak zgadniesz, lista parametrów pobierana przez polecenie.Tak więc, wykonując polecenie dla konkretnego przypadku, byłoby to:
Jednak to rozwiązanie dotyczy bardziej ogólnego przypadku aliasu poleceń z białymi spacjami.
W twoim konkretnym przypadku poleciłbym skorzystanie z rozwiązania jw013 do aliasu używanych poleceń git
git-config
źródło
if [[ $1 == 'commit' ]]...
? Rozszerzenie $ @ może zawierać więcej argumentów do zatwierdzenia, które faktycznie chcesz zachować.Ze strony podręcznika użytkownika aliasu bash
Ponieważ sprawdzane jest tylko pierwsze słowo, nie można mieć aliasu zawierającego wiele słów. W tym pytaniu dla superużytkownika przedstawiono obejście polegające na użyciu funkcji:
Można go dostosować do
git
.źródło
\ls
pomija alias dlals
.[_!%,@]
) powinno zostać rozwinięte. Nie zabrania rozszerzeń takich jak aliasing '\ ls' w zsh, lub aliasing w ksh / dash / bash / zsh, wa-b
przeciwnym razie nie istniałaby żadna powłoka POSIX. Mówi tylko, że przenośny skrypt (nie powłoka) nie powinien używać takiego aliasu.'git commit'
w pozycji polecenia w powłoce POSIX, musi ona wywołać wbudowane narzędzie, funkcję lub polecenie zewnętrzne.Mimo że poprawnym rozwiązaniem jest użycie aliasów, takich jak sugerowany jw013, do utworzenia aliasu ze spacjami możesz używać NEST aliasów.
Na przykład mam alias do usuwania gałęzi zarówno lokalnie, jak i zdalnie, ale chciałbym, aby użytkownik zawsze określał gałąź:
źródło
Z tego przykładu powinno to działać:
Ale za pomocą twoich poleceń:
źródło