argumento que pasa a alias en bash [duplicado]
-
27-09-2019 - |
Pregunta
Esta pregunta ya tiene una respuesta aquí:
- Hacer un alias de Bash que toma un parámetro? 13 respuestas
¿Es posible hacer lo siguiente:
Quiero correr la siguiente:
mongodb bin/mongod
En mi bash_profile TENGO
alias = "./path/to/mongodb/$1"
Solución
Un alias se expandirá a la cadena que representa. Cualquier cosa después el alias aparecerá después de su expansión sin necesidad de ser o capaz de ser pasado como argumentos explícitas (por ejemplo $1
).
$ alias foo='/path/to/bar'
$ foo some args
conseguirá ampliado a
$ /path/to/bar some args
Si desea utilizar argumentos explícitos, tendrá que utilizar una función
$ foo () { /path/to/bar "$@" fixed args; }
$ foo abc 123
se ejecutará como si se hubiera hecho
$ /path/to/bar abc 123 fixed args
quitar la definición de un alias:
unalias foo
quitar la definición de una función:
unset -f foo
Para ver el tipo y la definición (para cada alias definidos, palabra clave, función incorporada o archivo ejecutable):
type -a foo
O escriba solamente (para la más alta ocurrencia prioridad):
type -t foo
Otros consejos
Por lo general, cuando quiero pasar argumentos a un alias en Bash, que utilizan una combinación de un alias y una función de este tipo, por ejemplo:
function __t2d {
if [ "$1x" != 'x' ]; then
date -d "@$1"
fi
}
alias t2d='__t2d'
utilizar parámetros en alias, i utilizar este método:
alias myalias='function __myalias() { echo "Hello $*"; unset -f __myalias; }; __myalias'
es una función de auto-destructiva envuelto en un alias, así que más o menos es lo mejor de ambos mundos, y no toma hasta una línea adicional (s) en sus definiciones ... que odio, oh sí, y si necesidad de que el valor de retorno, vas a tener que almacenarlo antes de llamar definida, y luego devuelve el valor usando la palabra clave "retorno" en esa función autodestructiva existe:
alias myalias='function __myalias() { echo "Hello $*"; myresult=$?; unset -f __myalias; return $myresult; }; __myalias'
Así que ..
se puede, si es necesario tener esa variable ahí
alias mongodb='function __mongodb() { ./path/to/mongodb/$1; unset -f __mongodb; }; __mongodb'
Por supuesto ...
alias mongodb='./path/to/mongodb/'
En realidad haría lo mismo sin la necesidad de parámetros, pero como he dicho, si quería o los necesitaba por alguna razón (por ejemplo, si se necesita $ 2 en lugar de $ 1), que tendría que utilizar un envoltorio de esa . Si es más grande que una línea podría considerar sólo escribir una función de plano ya que se convertiría en más de una monstruosidad, ya que se hizo más grande. Las funciones son genial, ya que obtiene todos los beneficios que dan funciones (véase la finalización, trampas, se unen, etc para las golosinas que pueden proporcionar funciones, en la página de manual de bash).
Espero que le ayuda a cabo:)
Esta es la solución que se puede evitar el uso de la función:
alias addone='{ num=$(cat -); echo "input: $num"; echo "result:$(($num+1))"; }<<<'
resultado de la prueba
addone 200
input: 200
result:201
CSH (en contraposición a golpe ) que puede hacer exactamente lo que quiere.
alias print 'lpr \!^ -Pps5'
print memo.txt
El \!^
notación hace que el argumento de que se insertará en el comando en este punto.
El carácter !
es precedida por una \
de impedir que se interpreta como un comando de la historia.
También puede pasar múltiples argumentos:
alias print 'lpr \!* -Pps5'
print part1.ps glossary.ps figure.ps
(ejemplos tomados de http://unixhelp.ed.ac.uk/ shell / alias_csh2.1.html .)
Para simplificar la respuesta de leed25d, utilice una combinación de un alias y una función. Por ejemplo:
function __GetIt {
cp ./path/to/stuff/$* .
}
alias GetIt='__GetIt'