E 'possibile effettuare le seguenti operazioni:Passando argomento di alias in bash
voglio eseguire il seguente:
mongodb bin/mongod
Nel mio bash_profile ho
alias = "./path/to/mongodb/$1"
E 'possibile effettuare le seguenti operazioni:Passando argomento di alias in bash
voglio eseguire il seguente:
mongodb bin/mongod
Nel mio bash_profile ho
alias = "./path/to/mongodb/$1"
Un alias si espanderà alla stringa che rappresenta. Qualsiasi cosa dopo l'alias apparirà dopo la sua espansione senza aver bisogno di essere o essere in grado di passare come argomenti espliciti (ad esempio $1
).
$ alias foo='/path/to/bar'
$ foo some args
otterrà ampliato per
$ /path/to/bar some args
Se si desidera utilizzare argomenti espliciti, è necessario utilizzare una funzione verrà eseguita
$ foo() { /path/to/bar "[email protected]" fixed args; }
$ foo abc 123
come se si fosse fatto
$ /path/to/bar abc 123 fixed args
Per indefinire 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 di file, incorporato o eseguibile):
type -a foo
Oppure digita solo (per la più alta occorrenza):
type -t foo
Di solito quando mi voglio passare argomenti ad un alias in Bash, io uso una combinazione di un alias e una funzione come questa, ad esempio:
function __t2d {
if [ "$1x" != 'x' ]; then
date -d "@$1"
fi
}
alias t2d='__t2d'
Per che cosa è sempre questa falsa istruzione 'se'? –
corretto. Era un errore di battitura, mi dispiace. era davvero pensato per verificare l'esistenza di $ 1 – leed25d
'[-n" $ 1 "]' (l'uso di "x" in questo modo è arcaico e inutile per qualsiasi shell moderna) –
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'
da utilizzare parametri alias, io uso questo metodo:
alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'
sua una funzione di auto-distruttiva avvolto in un alias, quindi praticamente è il migliore dei due mondi, e non prende una riga in più nelle tue definizioni ... che odio, oh sì e se hai bisogno di quel valore di ritorno, dovrai salvarlo prima di chiamare unset, e poi restituire il valore usando "return "parola chiave in quella funzione autodistruttiva lì:
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 involucro del genere. Se è più grande di una linea potresti considerare di scrivere una funzione a titolo definitivo poiché diventerebbe più un pugno nell'occhio man mano che diventerà più grande. Le funzioni sono grandi poiché si ottengono tutti i vantaggi che le funzioni danno (vedere completamento, trap, binding, ecc. Per i gadget che le funzioni possono fornire, nella manpage di bash).
spero che ti aiuta :)
~ $ alias myalias = 'function __myalias() {echo "Hello $ *"; unset -f __myalias; } __myalias ' ~ $ myalias -bash: errore di sintassi vicino a token imprevisto '__myalias' – JeeBee
Questo è orribile! stai ridefinendo la funzione ogni volta? (Non posso nemmeno preoccuparmi di controllare se ci sono errori di sintassi lì). –
Non è che debbano farlo ESATTAMENTE in questo modo, doveva essere un esempio, e sì è ridefinito ogni volta, che lo mantiene su una riga, altrimenti non sarebbe un colpo unico ? È come lamentarsi che "alias" si espande ogni volta al suo contenuto assegnato, com'è diverso? E non c'è bisogno di essere così emotivo. – osirisgothra
In csh (al contrario di bash) si può fare esattamente quello che vuoi.
alias print 'lpr \!^ -Pps5'
print memo.txt
La notazione \!^
provoca l'argomento da inserire nel comando a questo punto.
Il carattere !
è preceduto da un \
per impedire che venga interpretato come un comando storia.
È inoltre possibile passare più argomenti
alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps
(esempi presi da http://unixhelp.ed.ac.uk/shell/alias_csh2.1.html.)
Grazie! Io uso 'csh' al lavoro e questa è la prima volta che l'ho apprezzato! –
Questa è la soluzione che può evitare di utilizzare la funzione:
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
risultato
addone 200
input: 200
result:201
Ha funzionato perfettamente per me. Volevo passare il numero del colore (da 31 a 37) al comando PS nel mio alias. Ho fatto qualcosa di simile a questo: alias psany = '{PS1 = "\ e [0; $ (cat -) m> \ e [m";} <<<' UTILIZZO: psany 32 – zviad
Voglio solo aggiungere un esempio dal mio .bashrc mkcd() {mkdir "$ @" && cd "$ @"; } dove sto creando dir e cd'ing in –
Si dovrebbe colorare anche "abc" in rosso poiché $ @ = lista di argomenti passati alla funzione. – 10basetom
@ 10basetom: se ti riferisci ai colori nella mia risposta, ciò viene fatto automaticamente dall'evidenziatore della sintassi. –