Wie übergebe ich Befehlszeilenargumente an einen Shell-Alias?
Frage
Wie übergebe ich die Befehlszeilenargumente an einen Alias?Hier ist ein Beispiel:
alias mkcd='mkdir $1; cd $1;'
Aber in diesem Fall wird $xx zum Zeitpunkt der Aliaserstellung übersetzt und nicht zur Laufzeit.Ich habe jedoch mithilfe einer Shell-Funktion (nachdem ich ein wenig gegoogelt habe) eine Problemumgehung wie folgt erstellt:
function 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 meine Standard-Shell.
Lösung
Du hast 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.
Andere Tipps
Nur um zu wiederholen, was für andere Schalen bekannt gegeben worden ist, in Bash den folgenden Werken:
alias blah='function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah'
Ausführen der folgenden:
blah one two
Gibt die Ausgabe unter:
First: one
Second: two
Das geht nicht in ksh, aber schon in csh.
alias mkcd 'mkdir \!^; cd \!^1'
Bei ksh ist Funktion der richtige Weg.Aber wenn Sie wirklich wirklich Alias verwenden wollten:
alias mkcd='_(){ mkdir $1; cd $1; }; _'
Um die Bash-Manpage zu zitieren:
Es gibt keinen Mechanismus zur Verwendung von Argumenten im Ersetzungstext.Wenn Argumente erforderlich sind, sollte eine Shell -Funktion verwendet werden (siehe Funktionen unten).
Es sieht also so aus, als hätten Sie Ihre eigene Frage beantwortet: Verwenden Sie eine Funktion anstelle eines Alias
Sie können diesen Befehl auch nützlich finden:
mkdir dirname && cd $_
Dabei gilt dirname der Name des Verzeichnisses, das Sie erstellen wollen
Der einfachste Weg besteht darin, eine Funktion und keinen Alias zu verwenden.Sie können eine Funktion jederzeit über die CLI aufrufen.In Bash können Sie einfach die Funktion name() { command } hinzufügen, die genauso geladen wird wie ein Alias.
function mkcd() { mkdir $1; cd $1 ;}
Bei anderen Muscheln bin ich mir nicht sicher
Sie können eigentlich nicht tun, was Sie mit Bash-Aliase wollen, da Aliase statisch sind. Verwenden Sie stattdessen die Funktion, die Sie erstellt haben.
Sehen Sie hier für weitere Informationen: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Ja, ich weiß, es ist mactips.org, aber es ist über Bash, also keine Sorge.)
Ich fand, dass Funktionen nicht in ~ / .cshrc Datei geschrieben werden .. Hier in alias welche Argumente nimmt
zum Beispiel Argumente übergeben zu ‚finden‘ Befehl
alias fl "find . -name '\!:1'"
Ex: >fl abc
Dabei steht abc wird das Argument übergeben als: 1
Das funktioniert in ksh:
$ alias -x mkcd="mkdir \$dirname; cd \$dirname;"
$ alias mkcd
mkcd='mkdir $dirname; cd $dirname;'
$ dirname=aaa
$ pwd
/tmp
$ mkcd
$ pwd
/tmp/aaa
Die Option „-x“ macht den Alias „exportiert“ – Alias ist in Subshells sichtbar.
Beachten Sie außerdem, dass in einem Skript definierte Aliase in diesem Skript nicht sichtbar sind (da Aliase beim Laden eines Skripts erweitert werden, nicht bei der Interpretation einer Zeile).Dies kann gelöst werden, indem eine andere Skriptdatei in derselben Shell ausgeführt wird (mithilfe von dot).
Ich glaube, Sie sind in der Lage es mit Shell-Funktionen zu tun, wenn Sie bash verwenden: http://www.cyberciti.biz/faq/ linux-Unix-Pass-Argument-to-alias-Befehl /
Hier ist ein einfaches Beispiel Funktion mit Python. Sie können in ~ Stick / .bashrc
Du musst hat einen Raum nach der ersten linken geschweiften Klammer
Der Python-Befehl muss in doppelten Anführungszeichen, um die Variablensubstitution
erhalten Vergessen Sie nicht, dass Semikolon am Ende
Funktion count () {python -c "für num in xrange ($ 1): print num";}
$ count 6
0
1
2
3
4
5
$
Ein leerer Alias führt seine Argumente aus:
alias DEBUG=