Ich möchte einen Alias definieren, der die folgenden zwei Befehle nacheinander ausführt.
gnome-screensaver
gnome-screensaver-command --lock
Im Moment habe ich hinzugefügt
alias lock='gnome-screensaver-command --lock'
zu meiner .bashrc, aber da ich meine Workstation so oft sperre, wäre es einfacher, nur einen Befehl einzugeben.
bash
configuration
Yuriel
quelle
quelle
lock()
Klammern führt zu einem Fehlersyntax error near unexpected token
msg'` ..$1
,$2
... in den Funktionskörpern.Die anderen Antworten beantworten die Frage angemessen, aber Ihr Beispiel sieht so aus, als ob der zweite Befehl davon abhängt, ob der erste erfolgreich beendet wird. Möglicherweise möchten Sie eine Kurzschlussauswertung in Ihrem Alias versuchen :
Jetzt wird der zweite Befehl erst ausgeführt, wenn der erste erfolgreich ist. Eine bessere Beschreibung der Kurzschlussbewertung wird in dieser SO-Frage beschrieben .
quelle
git fetch && git pull origin master
ich das&&
mit versucht und habe nicht für mich gearbeitet, bis ich durch ersetzt habe;
.Aliase sind für das Aliasing von Befehlsnamen gedacht . Alles darüber hinaus sollte mit Funktionen erledigt werden.
Aliase sind Namen, die noch mit dem ursprünglichen Namen verknüpft sind.
ll
ist nur eine etwas bestimmte Art vonls
.Eine Funktion ist ein neuer Befehl mit interner Logik. Es ist nicht einfach eine Umbenennung eines anderen Befehls. Es führt interne Operationen durch.
Technisch gesehen sind Aliase in der Bash-Shell-Sprache in ihren Funktionen so eingeschränkt, dass sie für alles, was mehr als einen einzelnen Befehl umfasst, äußerst schlecht geeignet sind . Verwenden Sie sie, um eine kleine Mutation eines einzelnen Befehls zu erstellen, nicht mehr.
Da beabsichtigt wird, einen neuen Befehl zu erstellen, der eine Operation ausführt, die intern in anderen Befehlen aufgelöst wird, besteht die einzig richtige Antwort darin, hier eine Funktion zu verwenden:
Die Verwendung von Aliasen in einem solchen Szenario stößt auf viele Probleme. Im Gegensatz zu Funktionen, die als Befehle ausgeführt werden, werden Aliase in den aktuellen Befehl erweitert, was zu sehr unerwarteten Problemen führt, wenn dieser Alias "Befehl" mit anderen Befehlen kombiniert wird. Sie funktionieren auch nicht in Skripten.
quelle
gps() { git commit -m 'init '; git push; git status; }
Wie bereits erläutert, sind Aliase äußerst begrenzt, zerbrechlich und sollen nur Befehle umbenennen. Wenn Sie sie für nicht verwandte Zwecke missbrauchen, landen Sie in heißem Wasser, wie Sie es gerade erlebt haben.Funktioniert das nicht
quelle
Dies würde die 2 Befehle nacheinander ausführen:
quelle
Verwenden Sie also ein Semikolon:
Dies funktioniert nicht gut, wenn Sie dem ersten Befehl Argumente liefern möchten. Alternativ können Sie ein einfaches Skript in Ihrem Verzeichnis $ HOME / bin erstellen.
quelle
Wenn Sie meine 2 Cent zur 11 Jahre alten Diskussion hinzufügen, versuchen Sie Folgendes:
alias lock="gnome-screensaver \gnome-screensaver-command --lock"
quelle
Fügen Sie diese Funktion zu Ihrem hinzu
~/.bashrc
und starten Sie Ihr Terminal neu oder führen Sie es aussource ~/.bashrc
Auf diese Weise werden diese beiden Befehle bei jeder Eingabe ausgeführt
lock
Ihr Terminal .In Ihrem speziellen Fall
alias
funktioniert das Erstellen eines möglicherweise, aber ich empfehle es nicht. Intuitiv würden wir denken, dass der Wert eines Alias genauso ausgeführt wird, als ob Sie den Wert in das Terminal eingegeben hätten. Dies ist jedoch nicht der Fall:und
Verwenden Sie also keinen Alias, es sei denn, Sie müssen. https://ss64.com/bash/alias.html
quelle
Ich bin auf ein Problem gestoßen, als ich Aliase deklariert habe
~/.bashrc
. Mein Terminal hat die Aliase, in denen ich deklariert habe, nicht erkannt~/.bashrc
. Ich habe aus dem Artikel (unten angefügt) erfahren, dass Mac OS Xlogin-shell
standardmäßig ausgeführt wird und daher~/.bash_profile
statt aufgerufen wird~/.bashrc
.Sollten Sie bei der Deklaration Ihrer Aliase auf dasselbe Problem stoßen, können Sie auf den folgenden Link verweisen, um das Problem zu lösen:
http://www.joshstaiger.org/archives/2005/07/bash_profile_vs.html
quelle
source .bashrc
nach dem Speichern von Änderungen an der Datei durch, damit der Alias erkannt werden kann, ohne sich abzumelden.