wake-up-neo.com

Übergabe des Arguments an den Alias ​​in der Bash

Ist es möglich, Folgendes zu tun:

Ich möchte Folgendes ausführen:

mongodb bin/mongod

In meinem bash_profil habe ich

alias = "./path/to/mongodb/$1"
115
slik

Ein Alias ​​wird auf die Zeichenfolge erweitert, die er darstellt. Alles nach dem Alias ​​wird nach seiner Erweiterung angezeigt, ohne dass es als explizites Argument übergeben werden muss oder kann (z. B. $1).

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

wird erweitert um

$ /path/to/bar some args

Wenn Sie explizite Argumente verwenden möchten, müssen Sie eine Funktion verwenden

$ foo () { /path/to/bar "[email protected]" fixed args; }
$ foo abc 123

wird ausgeführt, als ob Sie getan hätten

$ /path/to/bar abc 123 fixed args

So heben Sie die Definition eines Alias ​​auf:

unalias foo

So definieren Sie eine Funktion nicht mehr:

unset -f foo

So zeigen Sie den Typ und die Definition an (für jeden definierten Alias, jedes definierte Schlüsselwort, jede Funktion, jede eingebaute oder ausführbare Datei):

type -a foo

Oder geben Sie nur Folgendes ein (für das Vorkommen mit der höchsten Priorität):

type -t foo
214

Wenn ich einem Alias ​​in Bash Argumente übergeben möchte, verwende ich normalerweise eine Kombination aus einem Alias ​​und einer Funktion wie der folgenden:

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

alias t2d='__t2d'                                                               
21
leed25d

um Parameter in Aliasen zu verwenden, benutze ich diese Methode:

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

es ist eine selbstzerstörerische Funktion, die in einem Alias ​​verpackt ist, so dass es so ziemlich das Beste aus beiden Welten ist und keine zusätzlichen Zeilen in Ihren Definitionen aufnimmt ... was ich hasse, oh ja, und wenn Sie diese Rückgabe brauchen Wert, müssen Sie ihn speichern, bevor Sie unset aufrufen, und dann den Wert mit dem Schlüsselwort "return" in dieser selbstzerstörenden Funktion zurückgeben:

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

so..

sie könnten, wenn Sie diese Variable dort haben müssen

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

na sicher...

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

würde eigentlich das gleiche tun, ohne dass Parameter benötigt werden, aber wie ich schon sagte, wenn Sie sie aus irgendeinem Grund wollten oder brauchten (zum Beispiel brauchten Sie 2 USD anstelle von 1 USD), müssten Sie einen solchen Wrapper verwenden. Wenn es größer als eine Zeile ist, können Sie erwägen, eine Funktion direkt zu schreiben, da sie mit zunehmender Größe eher nervös wird. Funktionen sind großartig, da Sie alle Vorteile erhalten, die Funktionen bieten (siehe Vervollständigung, Fallen, Binden usw. für die Extras, die Funktionen bieten können, in der Bash-Manpage).

Ich hoffe das hilft dir :)

19
osirisgothra

Dies ist die Lösung, die die Verwendung von Funktionen vermeiden kann:

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

testergebnis

addone 200
input: 200
result:201
7
blreay

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

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

Die Notation \!^ Bewirkt, dass das Argument an dieser Stelle in den Befehl eingefügt wird.

Dem Zeichen ! Wird ein \ Vorangestellt, um zu verhindern, dass es als Verlaufsbefehl 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 .)

3
jimgug