Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

         

¿Es posible hacer lo siguiente:

Quiero correr la siguiente:

mongodb bin/mongod

En mi bash_profile TENGO

alias = "./path/to/mongodb/$1"
¿Fue útil?

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'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top