Wie übergebe ich die Befehlszeilenargumente an einen Alias? Hier ist ein Beispiel:
alias mkcd = 'mkdir $ 1; cd $ 1; '
In diesem Fall wird $ xx jedoch zum Zeitpunkt der Erstellung des Alias und nicht zur Laufzeit übersetzt. Ich habe jedoch eine Problemumgehung mithilfe einer Shell-Funktion (nachdem ich ein wenig gegoogelt habe) wie folgt erstellt:
Funktion mkcd () { mkdir $ 1 cd $ 1 }}
Ich wollte nur wissen, ob es eine Möglichkeit gibt, Aliase zu erstellen, die CL-Parameter akzeptieren.
Übrigens - ich verwende 'bash' als Standard-Shell.
mkdir mydirectoryname && cd $_
Antworten:
Sie haben den Weg gefunden: Erstellen Sie eine Funktion anstelle eines Alias. Die C-Shell verfügt über einen Mechanismus zum Ausführen von Argumenten für Aliase, Bash und die Korn-Shell jedoch nicht, da der Funktionsmechanismus flexibler ist und die gleichen Funktionen bietet.
quelle
.bashrc
Datei erstellen. Beispiel: # Erstellen Sie einen Alias, der die Portnummer des Benutzeralias "Serve =" python -m SimpleHTTPServer $ 1 "übernimmt. Geben Sie nach der Änderung in der .bashrc-Datei den folgenden Befehl ein. ~ $ source .bashrc Sie sollten in der Lage sein, dies so zu verwenden ~ $ serve 8998Um noch einmal zu wiederholen, was für andere Shells gepostet wurde, funktioniert in Bash Folgendes:
Führen Sie Folgendes aus:
Gibt die Ausgabe unten:
quelle
Bash
zu ersetzen$1
und$2
mit den an die Funktion übergebenen Parametern. Einfache Anführungszeichen weisen Bash an, dies nicht zu tun.function blah(){ echo "First: $1"; echo "Second: $2"; }
Sie können nicht in ksh, aber Sie können in csh.
In ksh ist die Funktion der richtige Weg. Aber wenn Sie wirklich wirklich Alias verwenden wollten:
quelle
csh
normalerweise nicht das ist, was ein moderner Mensch verwenden möchte. Der Alias, der eine Funktion erstellt und diese Funktion dann ausführt, ist relativ beliebt, bietet aber meines Erachtens keinen Vorteil gegenüber einer ordnungsgemäßen Funktion. (Die Funktion sollte ihr Argument sowieso richtig zitieren.) Downvoting.So zitieren Sie die Bash-Manpage:
Es sieht also so aus, als hätten Sie Ihre eigene Frage beantwortet - verwenden Sie eine Funktion anstelle eines Alias
quelle
Sie können diesen Befehl auch nützlich finden:
mkdir dirname && cd $_
Dabei ist dirname der Name des Verzeichnisses, das Sie erstellen möchten
quelle
$_
ist die Ausgabe des letzten Befehls unix.stackexchange.com/a/271693/169772Ich habe festgestellt, dass Funktionen nicht in
~/.cshrc
Dateien geschrieben werden können. Hier im Alias, der Argumente nimmtZum Beispiel Argumente, die an den Befehl 'find' übergeben wurden
Dabei ist abc das Argument, das als! übergeben wird: 1
quelle
!:1
bedeutete. Ich musste nach unten scrollen, um hier zu sehen, dass es das Argument war. Eine gute Antwort hinterlässt keine weiteren Fragen, auch wenn es sich nicht um den Shell-Typ des OP handelt.Der einfachste Weg ist, die Funktion nicht als Alias zu verwenden. Sie können jederzeit eine Funktion von der CLI aus aufrufen. In bash können Sie einfach den Funktionsnamen () {Befehl} hinzufügen, der wie ein Alias geladen wird.
Ich bin mir bei anderen Muscheln nicht sicher
quelle
Mit Bash-Aliasen können Sie eigentlich nicht machen, was Sie wollen, da Aliase statisch sind. Verwenden Sie stattdessen die von Ihnen erstellte Funktion.
Weitere Informationen finden Sie hier: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Ja, ich weiß, es ist mactips.org, aber es geht um Bash, also mach dir keine Sorgen.)
quelle
Dies funktioniert in ksh:
Mit der Option "-x" wird der Alias "exportiert" - der Alias wird in Subshells angezeigt.
Beachten Sie auch, dass in einem Skript definierte Aliase in diesem Skript nicht sichtbar sind (da Aliase beim Laden eines Skripts erweitert werden und nicht beim Interpretieren einer Zeile). Dies kann gelöst werden, indem eine andere Skriptdatei in derselben Shell ausgeführt wird (mit Punkt).
quelle
Ich denke, Sie können es mit Shell-Funktionen tun, wenn Sie bash verwenden: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
quelle
Funktion count () {python -c "für num in xrange ($ 1): print num";}
quelle
Ein leerer Alias führt seine Argumente aus:
quelle