Wiele poleceń w aliasie dla bash
Chciałbym zdefiniować alias, który uruchamia następujące dwa polecenia kolejno.
gnome-screensaver
gnome-screensaver-command --lock
Właśnie dodałem
alias lock='gnome-screensaver-command --lock'
Do mojego .bashrc ale ponieważ tak często blokuję moją stację roboczą, łatwiej byłoby wpisać jedną komendę. 7 answers
Try:
alias lock='gnome-screensaver; gnome-screensaver-command --lock'
Lub
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
W Twoim .bashrc
Drugie rozwiązanie pozwala na użycie argumentów.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-16 15:51:10
Pozostałe odpowiedzi odpowiadają odpowiednio na pytanie, ale twój przykład wygląda na to, że druga Komenda zależy od pomyślnego zakończenia pierwszej. Możesz spróbować Ocena zwarcia w swoim aliasie:
alias lock='gnome-screensaver && gnome-screensaver-command --lock'
Teraz drugie polecenie nie będzie nawet próbowane, dopóki pierwsze nie powiedzie się. Lepszy opis oceny zwarcia jest opisany w tym więc pytanie .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:41
Aliasy są przeznaczone dla aliasingu nazw poleceń. Wszystko poza tym powinno być zrobione za pomocą funkcji.
alias ll='ls -l' # The ll command is an alias for ls -l
Aliasy to nazwy, które są nadal związane z oryginalną nazwą. ll
jest tylko nieco specyficznym rodzajem ls
.
d() {
if exists colordiff; then
colordiff -ur "$@"
elif exists diff; then
diff -ur "$@"
elif exists comm; then
comm -3 "$1" "$2"
fi | less
}
Funkcja jest nowym poleceniem, które ma wewnętrzną logikę. Nie jest to po prostu zmiana nazwy innego polecenia. Wykonuje operacje wewnętrzne.
Technicznie aliasy w języku powłoki Bash są tak ograniczone w możliwościach, że są bardzo źle przystosowane do wszystkiego, co wymaga więcej niż pojedynczego polecenia. Użyj ich do stworzenia małej mutacji pojedynczego polecenia, nic więcej.
Ponieważ intencją jest utworzenie nowego polecenia, które wykonuje operację, która wewnętrznie zostanie rozwiązana w innych poleceniach, jedyną poprawną odpowiedzią jest użycie tutaj funkcji:
lock() {
gnome-screensaver
gnome-screensaver-command --lock
}
Użycie aliasów w takim scenariuszu napotyka wiele problemów. W przeciwieństwie do funkcji, które są wykonywane jako polecenia, aliasy są rozszerzane do bieżącego polecenia, co spowoduje bardzo nieoczekiwane problemy podczas łączenia tego aliasu "command" z innymi poleceniami. Nie działają również w skryptach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-16 17:44:07
Czy to nie działa?
alias whatever='gnome-screensaver ; gnome-screensaver-command --lock'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-16 15:50:32
To uruchomi 2 komendy jeden po drugim:
alias lock='gnome-screensaver ; gnome-screensaver-command --lock'
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-16 15:50:54
Więc użyj średnika:
alias lock='gnome-screensaver; gnome-screen-saver-command --lock'
To nie działa dobrze, jeśli chcesz podać argumenty do pierwszego polecenia. Ewentualnie Utwórz trywialny skrypt w katalogu $HOME / bin.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-16 15:51:09
Napotkałem problem przy deklarowaniu aliasów w ~/.bashrc
. Mój terminal nie rozpoznał aliasów, które zadeklarowałem w ~/.bashrc
. Z artykułu (załączonego na dole) dowiedziałem się, że Mac OS X domyślnie uruchamia login-shell
, stąd wywołuje ~/.bash_profile
zamiast ~/.bashrc
.
Jeśli napotkasz ten sam problem przy deklarowaniu swoich aliasów, możesz skorzystać z poniższego linku, aby rozwiązać problem:
Http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-21 03:11:04