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.

War es hilfreich?

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=
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top