¿Cómo pasar argumentos de línea de comando a un alias de shell?
(12)
¿Cómo paso los argumentos de la línea de comando a un alias? Aquí hay una muestra:
alias mkcd=''mkdir $1; cd $1;''
Pero en este caso, $ xx se traduce en el momento de creación del alias y no en el tiempo de ejecución. Sin embargo, he creado una solución utilizando una función de shell (después de buscar un poco en Google) como a continuación:
function mkcd(){ mkdir $1 cd $1 }
Solo quería saber si hay una manera de hacer alias que acepten parámetros CL.
Por cierto, uso ''bash'' como mi shell por defecto.
Aquí hay una simple función de ejemplo usando python. Puedes pegar en ~ / .bashrc
Tienes que tener un espacio después de la primera horquilla izquierda.
El comando python debe estar entre comillas dobles para obtener la sustitución de la variable
No olvides ese punto y coma al final.
función count () {python -c "para num en xrange ($ 1): número de impresión";}
$ count 6
0
1
2
3
4
5
$
Creo que puedes hacerlo con funciones de shell si estás usando bash: http://www.cyberciti.biz/faq/linux-unix-pass-argument-to-alias-command/
Encontré que las funciones no se pueden escribir en el archivo ~ / .cshrc ... Aquí en alias que toma argumentos
por ejemplo, los argumentos pasados al comando ''buscar''
alias fl "find . -name ''/!:1''"
Ex: >fl abc
donde abc es el argumento pasado como!: 1
Encontraste el camino: crea una función en lugar de un alias. El shell C tiene un mecanismo para hacer argumentos a los alias, pero bash y el shell Korn no lo hacen, porque el mecanismo de la función es más flexible y ofrece la misma capacidad.
Esto funciona en ksh:
$ alias -x mkcd="mkdir /$dirname; cd /$dirname;"
$ alias mkcd
mkcd=''mkdir $dirname; cd $dirname;''
$ dirname=aaa
$ pwd
/tmp
$ mkcd
$ pwd
/tmp/aaa
La opción "-x" hace que el alias "exportado" - el alias es visible en subshells.
Y tenga en cuenta el hecho de que los alias definidos en un script no son visibles en ese script (porque los alias se expanden cuando se carga un script, no cuando se interpreta una línea). Esto se puede resolver ejecutando otro archivo de script en la misma shell (usando punto).
La forma más fácil, es usar la función, no el alias. Aún puedes llamar a una función en cualquier momento desde el cli. En bash, simplemente puede agregar el nombre de la función () {comando} que carga lo mismo que un alias.
function mkcd() { mkdir $1; cd $1 ;}
No estoy seguro de otras conchas.
No puedes en ksh, pero puedes en csh.
alias mkcd ''mkdir /!^; cd /!^1''
En ksh, la función es el camino a seguir. Pero si realmente quisieras usar un alias:
alias mkcd=''_(){ mkdir $1; cd $1; }; _''
Para citar la página del manual de bash:
No hay ningún mecanismo para usar argumentos en el texto de reemplazo. Si se necesitan argumentos, se debe usar una función de shell (ver FUNCIONES a continuación).
Así que parece que has respondido tu propia pregunta: usa una función en lugar de un alias
Realmente no puedes hacer lo que quieres con los alias de Bash, ya que los alias son estáticos. En su lugar, utilice la función que ha creado.
Busque aquí para obtener más información: http://www.mactips.org/archives/2008/01/01/increase-productivity-with-bash-aliases-and-functions/ . (Sí, sé que es mactips.org, pero se trata de Bash, así que no te preocupes).
Solo para reiterar lo que se ha publicado para otros shells, en Bash los siguientes trabajos:
alias blah=''function _blah(){ echo "First: $1"; echo "Second: $2"; };_blah''
Ejecutando lo siguiente:
blah one two
Da la salida de abajo:
First: one
Second: two
También puede encontrar útil este comando:
mkdir dirname && cd $_
donde dirname es el nombre del directorio que desea crear
Un alias vacío ejecutará sus argumentos:
alias DEBUG=