Gibt es eine Möglichkeit, einen Befehl mit mehreren Wörtern in Unix zu aliasen?
11
Ich versuche, den Befehl zu aliasen, sudo shutdownaber in meinem .profilekann ich nicht einfach tun alias "sudo shutdown"="my command". Gibt es eine andere Möglichkeit, Befehle mit mehreren Wörtern in Unix zu aliasen?
Ich habe all diese Techniken ausprobiert und sie haben alle funktioniert! Vielen Dank an alle!
Agentbanks217
Probieren Sie auch die Lösung in meiner Bearbeitung aus , da mir klar wurde, dass Sie wirklich beabsichtigten, "sudo shutdown" als Alias etwas zu spät zu haben.
Antworten:
19
Der Aliasname befindet sich auf der linken Seite, sodass Sie rechts einen beliebigen Befehl mit mehreren Wörtern haben können:
alias my_alias="multi worded command"
BEARBEITEN: Wenn Sie jedoch wirklich Aliase mit mehreren Wörtern haben möchten - in Ihrem Beispiel, wenn Sie wirklich möchten, dass "sudo shutdown" der Alias ist, können Sie dies umgehen, indem Sie die folgende Alias-Funktion verwenden (im Bash-Handbuch) ):
A trailing space in value causes the next word to be checked for
alias substitution when the alias is expanded.
Wenn Sie also immer noch sudomit anderen Befehlen arbeiten möchten, aber nicht mit shutdownund wenn Sie es sich leisten können, einen Alias shutdownfür etwas anderes zu erstellen, können Sie Folgendes haben:
alias sudo='sudo '
alias shutdown="echo nope"
Funktioniert jetzt sudo anything_elsewie erwartet (vorausgesetzt, Sie haben keinen Alias für anything_else, aber wenn Sie ihn haben, hätte er auch vorher nicht funktioniert). sondern sudo shutdownwird gleich sudo echo nopeund es wird diese Zeichenfolge drucken.
Danke, unterschätzte Antwort; Ich habe alias cd="cd "Aliase mit Einzelbuchstaben verwendet alias X="<directory-with-long-name>", um leichter von Ort zu Ort zu springen.
Luke Davis
Stimmen Sie zu, das ist wirklich super nützlich. Ich alias gti="git "alias lgo="log"
tippe
4
Verwenden Sie eine Funktion:
foo() { if [ "$1" = "bar" ]; then echo "doing something..."; fi; }
Sie möchten wahrscheinlich einen elseFall, damit der ursprüngliche Befehl ausgeführt wird, wenn der zweite Parameter nicht lautetbar :foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
In der Bash-Dokumentation heißt es: "Für fast jeden Zweck werden Shell-Funktionen gegenüber Aliasen bevorzugt." Hier ist eine Shell-Funktion, die ersetzt lsund bewirkt, dass die Ausgabe weitergeleitet wird, morewenn das Argument aus (nur) besteht -la.
ls() {
if [[ $@ == "-la" ]]; then
command ls -la | more
else
command ls "$@"
fi
}
Als Einzeiler:
ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }
Ich ziehe es vor, einfach eine ausführbare Datei in / usr / local / bin abzulegen (stellen Sie sicher, dass sie sich in Ihrem Pfad befindet), die dann die Befehle enthält, die ich ausführen möchte. Der Name des Skripts wäre der Befehl, der angezeigt wird. Stellen Sie sicher, dass Sie + x / usr / local / bin / your_script chmod.
Das Skript könnte also als "Herunterfahren" bezeichnet werden.
Der Inhalt des Herunterfahrens der Datei wäre:
#!/bin/sh
sudo shutdown
Das eröffnet eine ganz neue Welt. Sie könnten dann ein paar Befehle oder sogar ein Skript haben:
#!/usr/bin/env python
print "hi"
# more stuff. ....
Antworten:
Der Aliasname befindet sich auf der linken Seite, sodass Sie rechts einen beliebigen Befehl mit mehreren Wörtern haben können:
BEARBEITEN: Wenn Sie jedoch wirklich Aliase mit mehreren Wörtern haben möchten - in Ihrem Beispiel, wenn Sie wirklich möchten, dass "sudo shutdown" der Alias ist, können Sie dies umgehen, indem Sie die folgende Alias-Funktion verwenden (im Bash-Handbuch) ):
Wenn Sie also immer noch
sudo
mit anderen Befehlen arbeiten möchten, aber nicht mitshutdown
und wenn Sie es sich leisten können, einen Aliasshutdown
für etwas anderes zu erstellen, können Sie Folgendes haben:Funktioniert jetzt
sudo anything_else
wie erwartet (vorausgesetzt, Sie haben keinen Alias füranything_else
, aber wenn Sie ihn haben, hätte er auch vorher nicht funktioniert). sondernsudo shutdown
wird gleichsudo echo nope
und es wird diese Zeichenfolge drucken.quelle
alias cd="cd "
Aliase mit Einzelbuchstaben verwendetalias X="<directory-with-long-name>"
, um leichter von Ort zu Ort zu springen.alias gti="git "
alias lgo="log"
Verwenden Sie eine Funktion:
quelle
else
Fall, damit der ursprüngliche Befehl ausgeführt wird, wenn der zweite Parameter nicht lautetbar
:foo() { if [ "$1" = "bar" ]; then echo "doing something..."; else command foo "$@"; fi; }
Um zu zitieren aus: Bash: Leerzeichen im Aliasnamen
In der Bash-Dokumentation heißt es: "Für fast jeden Zweck werden Shell-Funktionen gegenüber Aliasen bevorzugt." Hier ist eine Shell-Funktion, die ersetzt
ls
und bewirkt, dass die Ausgabe weitergeleitet wird,more
wenn das Argument aus (nur) besteht-la
.Als Einzeiler:
Automatische Pipe-Ausgabe:
quelle
Sie können einen Bindestrich als Problemumgehung verwenden:
alias sudo-shutdown="your command"
quelle
Ich ziehe es vor, einfach eine ausführbare Datei in / usr / local / bin abzulegen (stellen Sie sicher, dass sie sich in Ihrem Pfad befindet), die dann die Befehle enthält, die ich ausführen möchte. Der Name des Skripts wäre der Befehl, der angezeigt wird. Stellen Sie sicher, dass Sie + x / usr / local / bin / your_script chmod.
Das Skript könnte also als "Herunterfahren" bezeichnet werden.
Der Inhalt des Herunterfahrens der Datei wäre:
Das eröffnet eine ganz neue Welt. Sie könnten dann ein paar Befehle oder sogar ein Skript haben:
quelle