Domanda

    

Questa domanda ha già una risposta qui:

    
            
  •              Fare un alias Bash che prende un parametro?                                      13 risposte                          
  •     
    

E 'possibile effettuare le seguenti operazioni:

Voglio correre il seguente:

mongodb bin/mongod

Nel mio bash_profile ho

alias = "./path/to/mongodb/$1"
È stato utile?

Soluzione

Un alias si espanderà alla stringa che rappresenta. apparirà nulla dopo l'alias dopo la sua espansione, senza bisogno di o in grado di essere passati come argomenti espliciti (ad esempio $1).

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

otterrà ampliato a

$ /path/to/bar some args

Se si desidera utilizzare argomenti espliciti, è necessario utilizzare una funzione

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

verrà eseguito come se si fosse fatto

$ /path/to/bar abc 123 fixed args

da non definire un alias:

unalias foo

da non definire una funzione:

unset -f foo

Per visualizzare il tipo e la definizione (per ogni alias definiti, parola chiave, la funzione, incorporato o un file eseguibile):

type -a foo

o digita solo (per il più alto occorrenza di precedenza):

type -t foo

Altri suggerimenti

Di solito quando voglio passare gli argomenti a un alias in Bash, io uso una combinazione di un alias e una funzione come questa, per esempio:

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

alias t2d='__t2d'                                                               

utilizzare i parametri di alias, io uso questo metodo:

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

la sua una funzione di auto-distruttivo avvolto in un alias, quindi più o meno è il meglio dei due mondi, e non prende in su una linea aggiuntiva (s) nelle definizioni ... che io odio, oh yeah e se si necessità che il valore di ritorno, si dovrà conservarlo prima di chiamare non impostata, e quindi restituire il valore utilizzando la parola chiave "ritorno" in quel sé la funzione distruttiva c'è:

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

così ..

si potrebbe, se è necessario disporre di quella variabile in là

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

naturalmente ...

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

sarebbe in realtà fare la stessa cosa senza la necessità di parametri, ma come ho detto, se si voleva o bisogno per qualche motivo (ad esempio, è necessario $ 2 invece di $ 1), si avrebbe bisogno di utilizzare un wrapper come quello . Se è più grande di una linea che si potrebbe prendere in considerazione solo la scrittura di una funzione a titolo definitivo dato che sarebbe diventato più di un pugno nell'occhio in quanto è cresciuta più grande. Le funzioni sono grandi dato che si ottiene tutti i vantaggi che le funzioni danno (vedi completamento, trappole, si legano, ecc per le chicche che funzioni in grado di fornire, nella pagina di manuale bash).

Spero che ti aiuta:)

Questa è la soluzione che può evitare di utilizzare la funzione:

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

risultato del test

addone 200
input: 200
result:201

Nel csh (in contrapposizione a bash ) si può fare esattamente quello che vuoi.

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

Il \!^ notazione provoca l'argomento da inserire nel comando a questo punto.

Il carattere ! è preceduto da un \ d'impedirne l'interpretato come un comando di storia.

È possibile anche passare più argomenti:

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

(esempi tratti da http://unixhelp.ed.ac.uk/ shell / alias_csh2.1.html .)

Per semplificare la risposta di leed25d, utilizzare una combinazione di un alias e una funzione. Ad esempio:

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

alias GetIt='__GetIt'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top