Frage

    

Diese Frage bereits eine Antwort hier:

         

Ist es möglich, dass Sie Folgendes zu tun:

Ich möchte folgendes ausgeführt werden:

mongodb bin/mongod

In meinem bash_profile Ich habe

alias = "./path/to/mongodb/$1"
War es hilfreich?

Lösung

wird ein Alias ??auf den String erweitern sie darstellt. Alles, was nach dem Alias ??wird nach seiner Expansion erscheinen, ohne dass als explizite Argumente sein oder in der Lage zu übergeben (z $1).

$ alias foo='/path/to/bar'
$ foo some args

wird um erweitert zu erhalten

$ /path/to/bar some args

Wenn Sie explizite Argumente verwenden möchten, werden Sie eine Funktion

verwenden müssen
$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123

wird ausgeführt, als ob Sie getan hatte,

$ /path/to/bar abc 123 fixed args

ein Alias ??undefine:

unalias foo

Um eine Funktion undefine:

unset -f foo

den Typ und die Definition sehen (für jeden definierten Alias, Stichwort, Funktion, builtin oder eine ausführbare Datei):

type -a foo

oder geben Sie nur (für die höchste Priorität Vorkommen):

type -t foo

Andere Tipps

Normalerweise, wenn ich Argumente will in Bash an einen Alias ??passieren, verwende ich eine Kombination aus einem Alias ??und eine Funktion wie diese, zum Beispiel:

function __t2d {                                                                
         if [ "$1x" != 'x' ]; then                                              
            date -d "@$1"                                                       
         fi                                                                     
} 

alias t2d='__t2d'                                                               

verwenden Parameter in Aliase, ich benutze diese Methode:

alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'

es ist eine selbstzerstörerische Funktion in einem Alias ??eingewickelt, so dass es ziemlich das Beste aus beiden Welten, und tut eine zusätzliche Zeile (n) in Ihren Definitionen nehmen ..., die ich hasse, oh ja, und wenn Sie Notwendigkeit, dass Rückgabewert, Sie werden es speichern, müssen vor dem Aufruf nicht gesetzt und dann den Wert zurück, das „Rückkehr“ Schlüsselwort in dieser selbstzerstörerischen Funktion dort mit:

alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'

so ..

Sie könnten, wenn Sie diese Variable haben dort

alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'

natürlich ...

alias mongodb='./path/to/mongodb/'

würde eigentlich das gleiche tun, ohne dass Parameter, aber wie ich schon sagte, wenn man wollte oder brauchte sie aus irgendeinem Grund (zum Beispiel benötigt man 2 $ statt $ 1), würden Sie einen Wrapper wie verwenden müssen, dass . Wenn es größer als eine Zeile ist, könnte man bedenkt, nur eine Funktion geradezu zu schreiben, da es eher ein Schandfleck werden würde, wie es größer wurde. Funktionen sind groß, da Sie alle Vergünstigungen bekommen, dass Funktionen geben (siehe Abschluss, Fallen, binden, etc. für die Leckereien, dass Funktionen zur Verfügung stellen können, in der Bash-Manpage).

Ich hoffe, dass hilft Ihnen aus:)

Dies ist die Lösung, die Funktion vermeiden kann:

alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'

Tester

addone 200
input: 200
result:201

csh (im Gegensatz zu bash ) können Sie genau das tun, was Sie wollen.

alias print 'lpr \!^ -Pps5'
print memo.txt

Die Notation \!^ bewirkt, daß das Argument in dem Befehl an dieser Stelle eingefügt werden.

Das ! Zeichen durch eine \ vorausgeht, damit sie nicht als eine Geschichte Befehl interpretiert werden.

Sie können auch mehrere Argumente übergeben:

alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps

(Beispiele genommen von http://unixhelp.ed.ac.uk/ Shell / alias_csh2.1.html .)

Um leed25d Antwort, eine Kombination aus einem Alias ??und eine Funktion zu vereinfachen. Zum Beispiel:

function __GetIt {
    cp ./path/to/stuff/$* .
}

alias GetIt='__GetIt'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top