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ę.
Author: yuriel, 2009-04-16

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.

 292
Author: mouviciel,
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 .

 60
Author: gpojd,
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.

 12
Author: lhunath,
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'
 11
Author: Sean Bright,
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'
 4
Author: Adnan,
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.

 2
Author: Jonathan Leffler,
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

 -1
Author: Anthony,
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