Passando argomento di alias in bash [duplicato]
-
27-09-2019 - |
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"
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'