Ist es möglich, folgendes zu tun:Passing Argument alias in bash
Ich will laufen die folgenden:
mongodb bin/mongod
In meinem bash_profile Ich habe
alias = "./path/to/mongodb/$1"
Ist es möglich, folgendes zu tun:Passing Argument alias in bash
Ich will laufen die folgenden:
mongodb bin/mongod
In meinem bash_profile Ich habe
alias = "./path/to/mongodb/$1"
Ein Alias wird zu der Zeichenfolge erweitert, die es darstellt. Alles nach dem Alias erscheint nach seiner Erweiterung, ohne dass es als explizite Argumente übergeben oder übergeben werden kann (z. B. $1
).
$ alias foo='/path/to/bar'
$ foo some args
wird
$ /path/to/bar some args
Wenn Sie explizite Argumente bekommen erweitert verwenden möchten Sie wird verwenden müssen, eine Funktion
$ foo() { /path/to/bar "[email protected]" fixed args; }
$ foo abc 123
ausgeführt, als ob Sie
getan hatte$ /path/to/bar abc 123 fixed args
Undefiniert ein alias:
unalias foo
eine Funktion undefine:
unset -f foo
die Art und Definition siehe (für jeden definierten alias, Stichwort, Funktion, eingebaute oder eine ausführbare Datei):
type -a foo
Oder nur eingeben (für die höchste Präzedenz):
type -t foo
Normalerweise, wenn ich Will ich Argumente an einen Alias in Bash übergeben, verwende ich eine Kombination aus einem Alias und einer Funktion wie dieser, zum Beispiel:
function __t2d {
if [ "$1x" != 'x' ]; then
date -d "@$1"
fi
}
alias t2d='__t2d'
Was ist das immer falsche 'if'-Anweisung für? –
behoben. Es war ein Tippfehler, Entschuldigung. es war wirklich gedacht, um die Existenz von $ 1 – leed25d
'[-n" $ 1 "]' (die Verwendung von "x" auf diese Weise ist archaisch und unnötig für jede moderne Shell) zu überprüfen –
Um die Antwort von leed25d zu vereinfachen, verwenden Sie eine Kombination aus einem Alias und einer Funktion. Zum Beispiel:
function __GetIt {
cp ./path/to/stuff/$* .
}
alias GetIt='__GetIt'
Parameter in Aliasnamen zu verwenden, ich benutze diese Methode:
alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'
seine eine selbstzerstörerische Funktion in einem Alias eingewickelt, so dass es ziemlich das Beste aus beiden Welten, und nimmt keine zusätzlichen Zeilen in deinen Definitionen auf ... was ich hasse, oh ja, und wenn du diesen Rückgabewert brauchst, musst du ihn vor dem Aufruf von unset speichern und dann den Wert mit "return" zurückgeben "Stichwort in dieser selbstzerstörerischen Funktion dort:
alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'
so ..
Sie könnten, wenn Sie dort diese Variable haben in
alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'
natürlich ...
alias mongodb='./path/to/mongodb/'
tun würde tatsächlich die gleiche Sache, ohne die Notwendigkeit für 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 verwenden müssen so ein Wrapper. Wenn es größer als eine Zeile ist, könnte man überlegen, einfach eine Funktion zu schreiben, da es mehr und mehr zu einem Schandfleck wird, wenn es größer wird. Funktionen sind großartig, da Sie alle Vergünstigungen erhalten, die Funktionen geben (siehe Vervollständigung, Traps, Bindung usw. für die Goodies, die Funktionen zur Verfügung stellen können, in der Bash-Manpage).
Ich hoffe, dass hilft Ihnen aus :)
~ $ alias myalias = 'Funktion __myalias() {echo "Hallo $ *"; unset -f __myalias; } __myalias ' ~ $ myalias -bash: Syntaxfehler in der Nähe von unerwarteten Token '__myalias' – JeeBee
Das ist schrecklich! Sie definieren die Funktion jedes Mal neu? (Ich kann nicht einmal prüfen, ob Sie dort Syntaxfehler haben). –
Es ist nicht so, als müssten sie es genau so machen, es sollte ein Beispiel sein, und ja es wird jedes Mal neu definiert, was es auf einer Linie hält, sonst wäre es kein One-Shot wäre es ? Das ist so, als würde man sich darüber beschweren, dass "Alias" sich jedes Mal auf seinen zugewiesenen Inhalt ausdehnt. Wie ist das anders? Und es ist nicht nötig so emotional zu werden. – osirisgothra
In csh (im Gegensatz zu bash Gegensatz) können Sie genau das tun, was Sie wollen.
alias print 'lpr \!^ -Pps5'
print memo.txt
Die Notation \!^
bewirkt das Argument an diesem Punkt in dem Befehl eingefügt werden.
Dem Zeichen !
ist ein \
vorangestellt, um zu verhindern, dass es als Protokollbefehl interpretiert wird.
Sie können auch mehrere Argumente übergeben:
alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps
(Beispiele aus http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html entnommen.)
Danke! Ich benutze 'csh' bei der Arbeit und das ist das erste Mal, dass ich es geschätzt habe! –
Dies ist die Lösung, die mit der Funktion vermeiden:
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
Testergebnis
addone 200
input: 200
result:201
Es funktionierte perfekt für mich. Ich wollte die Farbnummer (von 31 bis 37) an PS-Befehl in meinem Alias übergeben. Ich habe so etwas getan: alias psany = '{PS1 = "\ e [0; $ (cat -) m> \ e [m";} <<<' VERWENDUNG: psany 32 – zviad
Ich möchte nur ein Beispiel aus meiner .bashrc hinzufügen mkcd() {mkdir "$ @" && cd "$ @"; } wo ich Dir und cd'ing in –
erstellen Sie sollten "abc" rot auch seit $ @ = Liste der Argumente an die Funktion übergeben. – 10basetom
@ 10basetom: Wenn Sie sich auf die Farben in meiner Antwort beziehen, geschieht dies automatisch durch den Syntax-Highlighter. –