Chciałbym zdefiniować alias, który uruchamia następujące dwa polecenia kolejno.
gnome-screensaver
gnome-screensaver-command --lock
W tej chwili dodałem
alias lock='gnome-screensaver-command --lock'
do mojego .bashrc, ale ponieważ tak często blokuję stację roboczą, łatwiej byłoby po prostu wpisać jedno polecenie.
bash
configuration
Juriel
źródło
źródło
lock()
nawiasach daje błąd msg''syntax error near unexpected token
..$1
,$2
... w ciele funkcji.Inne odpowiedzi odpowiednio odpowiadają na pytanie, ale twój przykład wygląda na to, że drugie polecenie zależy od pomyślnego wyjścia pierwszego. Możesz spróbować sprawdzić zwarcie w swoim aliasie:
Teraz drugie polecenie nie będzie nawet podejmowane, dopóki pierwsze nie powiedzie się. Lepszy opis oceny zwarcia opisano w tym pytaniu SO .
źródło
git fetch && git pull origin master
i nie działa na mnie aż wymieniłem&&
z;
.Aliasy służą do aliasingu nazw poleceń. Cokolwiek poza tym powinno być zrobione z funkcjami.
Aliasy to nazwy, które są nadal powiązane z pierwotną nazwą.
ll
jest tylko nieco specyficznym rodzajemls
.Funkcja to nowe polecenie o wewnętrznej logice. To nie jest po prostu zmiana nazwy innego polecenia. Wykonuje operacje wewnętrzne.
Technicznie aliasy w języku powłoki Bash mają tak ograniczone możliwości, że są wyjątkowo nieodpowiednie dla wszystkiego, co wymaga więcej niż jednego polecenia . Użyj ich do stworzenia małej mutacji pojedynczego polecenia, nic więcej.
Ponieważ intencją jest utworzenie nowego polecenia, które wykona operację, która wewnętrznie rozwiąże inne polecenia, jedyną prawidłową odpowiedzią jest użycie funkcji tutaj:
Użycie aliasów w takim scenariuszu napotyka wiele problemów. W przeciwieństwie do funkcji wykonywanych jako polecenia, aliasy są rozszerzane na bieżące polecenie, co doprowadzi do bardzo nieoczekiwanych problemów podczas łączenia tego polecenia „alias” z innymi poleceniami. Nie działają również w skryptach.
źródło
gps() { git commit -m 'init '; git push; git status; }
Jak wyjaśniono, aliasy są bardzo ograniczone, delikatne, a ich jedyną intencją jest zmiana nazwy poleceń. Nadużywanie ich do niezwiązanych celów spowoduje, że wylądujesz w gorącej wodzie, takiej jak właśnie doświadczyłeś.Czy to nie działa?
źródło
Spowodowałoby to uruchomienie dwóch poleceń jeden po drugim:
źródło
Więc użyj średnika:
Nie działa to dobrze, jeśli chcesz podać argumenty do pierwszego polecenia. Alternatywnie, stwórz trywialny skrypt w katalogu $ HOME / bin.
źródło
Dodając moje 2 centy do 11-letniej dyskusji, spróbuj:
alias lock="gnome-screensaver \gnome-screensaver-command --lock"
źródło
Dodaj tę funkcję do
~/.bashrc
i uruchom ponownie terminal lub uruchomsource ~/.bashrc
W ten sposób te dwa polecenia będą uruchamiane przy każdym wejściu
lock
do terminala.W twoim konkretnym przypadku tworzenie
alias
może działać, ale nie polecam tego. Intuicyjnie uważalibyśmy, że wartość aliasu byłaby taka sama, jakbyś wprowadził wartość w terminalu. Jednak tak nie jest:i
Więc nie używaj aliasu, chyba że musisz. https://ss64.com/bash/alias.html
źródło
Wystąpił problem, gdy zadeklarowałem pseudonimy
~/.bashrc
. Mój terminal nie rozpoznał aliasów, które zadeklarowałem~/.bashrc
. Na podstawie artykułu (załączonego na dole) dowiedziałem się, że Mac OS X działalogin-shell
domyślnie, dlatego~/.bash_profile
zamiast niego wywołuje~/.bashrc
.Jeśli napotkasz ten sam problem podczas deklarowania swoich aliasów, możesz skorzystać z następującego łącza, aby rozwiązać problem:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
źródło
source .bashrc
po zapisaniu zmian w pliku, aby umożliwić rozpoznanie aliasu bez wylogowania.