Ich möchte wissen, ob ich mit einem Alias-Befehl ein Argument übergeben kann.
beispielsweise:
alias d="dmesg|grep -iw usb|tail -5"
Jetzt d
werden die letzten 5 Zeilen gedruckt. Wenn ich d verwenden möchte, um eine andere Anzahl von Zeilen zu drucken, muss ich die Alias-Befehlsdeklaration von d
erneut ändern .
Kann ich die Deklaration eines Alias so ändern, dass ich die Deklaration nicht erneut eingeben muss, um die Anzahl der Zeilen zu ändern? Als ob Sie die Anzahl der Zeilen als Argument übergeben, während Sie den Alias für d
? Deklarieren . Oder gibt es eine andere Methode, um dies zu lösen?
command-line
bash
alias
srk_cb
quelle
quelle
Antworten:
Aliase nehmen keine Argumente an. Mit einem Alias mag
alias foo='bar $1'
, das$1
wird von der Shell erste Argument der Shell (was wahrscheinlich nichts ist) erweitert werden , wenn das Alias ausgeführt wird.Also: Verwenden Sie stattdessen Funktionen .
num=${1:-5}
Verwendet das erste Argument mit dem Standardwert 5, wenn es nicht angegeben ist.Dann können Sie tun:
Oder, wenn Sie die von Ihnen verwendeten Optionen geringfügig ändern:
Dann können Sie zusätzliche
-n
Optionen übergeben:Wenn mehrere
-n
Optionen für angegeben sindtail
, wird nur die letzte verwendet.quelle
~/.bashrc
oderrc.local
oder wo auch immer?Hierfür benötigen Sie eine Funktion, wie sie im SO und hier beschrieben ist . Versuche Folgendes:
und ruf das
foo
mit:quelle
Umgehen von Alias-Einschränkungen mit dem Befehl group und here-string
Aliase können keine Argumente akzeptieren, aber wir können das "simulieren". Nehmen Sie zum Beispiel meine Antwort auf diese Frage .
Wichtige Punkte, die hier passieren:
read
Built-In, um einen String in eine Variable einzulesend
. Da wir eine vollständige Zeichenfolge einschließlich Leerzeichen (Zeilenumbrüche, Tabulatoren, Leerzeichen) lesen möchten, verwendenIFS=
und deaktivieren wir umgekehrte Schrägstriche mit-r
.<<<
Der Here-String-Operator ermöglicht es uns, jeden String, den wir als Argument für denmkcd
Alias angeben, umzuleiten . die nutzung wäre wiemkcd "some directory"
{ list; }
Struktur (diegroup command
imbash
Handbuch als bekannt bezeichnet wird) ausgeführt. Beachten Sie, dass ein vorangestelltes Leerzeichen nach{
und eine;
individuelle Liste von Befehlen erforderlich sind.In Ihrem speziellen Beispiel könnten wir Folgendes tun:
Wir könnten auch die Wortteilung verwenden, um durch Leerzeichen getrennte Argumente zu speichern:
Oder wir könnten Arrays verwenden, um mehrere Argumente bereitzustellen:
Aber ist das ein guter Ansatz?
Nicht unbedingt. Das Problem bei einem solchen Ansatz ist, dass er sehr spezifisch ist - Argumente können nicht einfach zitiert werden, was bedeutet, dass wir nur Argumente ohne Leerzeichen haben können.
Dies ist natürlich nicht weit verbreitet, nur weil wir uns in der realen Welt mit komplexen Argumenten auseinandersetzen müssen, weshalb dieser Ansatz nicht ganz praktisch ist. Funktionen sind weitaus flexibler. Und die Notwendigkeit, args string zu zitieren, wird schnell ärgerlich.
Ungeachtet der Einschränkungen funktioniert dies mit einfachen Zeichenfolgen als Argumente, bei denen wir uns eine Wortteilung leisten können, sodass wir teilweise Aliase mit Argumenten versehen können.
quelle