it-swarm-es.tech

¿Cómo pasar parámetros a un alias?

Para el script bash, puedo usar "[email protected]" para acceder a los argumentos. ¿Cuál es el equivalente cuando uso un alias?

77
prosseek

Los alias son como comandos en el sentido de que todos los argumentos a ellos se pasan como argumentos al programa alias. Por ejemplo, si fuera alias ls a ls -la, luego escribiendo ls foo bar would realmente ejecutar ls -la foo bar en la línea de comando.

Si desea tener un control real sobre cómo se interpretan los argumentos, puede escribir una función como esta:

my_program_wrapper() {
    local first_arg="$1" \
          second_arg="$2"

    shift 2               # get rid of the first two arguments

    # ...

    /path/to/my_program "[email protected]"
}
54
amphetamachine

solución de alias

Si realmente está en contra de usar una función per se, puede usar:

$ alias wrap_args='f(){ echo before "[email protected]" after;  unset -f f; }; f'
$ wrap_args x y z
before x y z after

Puedes reemplazar [email protected] con $1 si solo quieres el primer argumento.

Explicación

Esto crea una función temporal f, a la que se le pasan los argumentos.

Los argumentos de alias solo se pasan al final. Tenga en cuenta que f se llama al final del alias.

Los unset -f elimina la definición de la función a medida que se ejecuta el alias para que no se cuelgue después.

34
Tom Hale

Además de las respuestas actuales, una cosa importante a tener en cuenta sobre cómo funcionan los alias es que todos los parámetros que escriba después de un comando con alias se usarán literalmente al final. Por lo tanto, no hay forma de usar alias para dos comandos (canalizados o no), de los cuales el primero debe interpretar los parámetros. Para que quede claro, aquí hay un ejemplo de algo que no funcionaría como se esperaba:

alias lsswp="ls -l | grep swp"

(un ejemplo inspirado por esta pregunta ) esto siempre usará la salida de ls -l realizado en el directorio ¡actual y hacer un grep sobre eso, así que usando

lsswp/tmp /

sería equivalente a ls -l | grep swp /tmp/ y no ls -l /tmp/ | grep swp.

Para todos los propósitos donde los argumentos deben usarse en algún lugar en el medio, uno necesita usar un function en lugar de alias.

19
rozcietrzewiacz

No tienes que hacer nada, en realidad; los alias hacen esto automáticamente. Por ejemplo:

$ alias less="less -eirqM"
$ less foo.txt

Verá la primera página de foo.txt y less se cerrará en EOF (-e), las búsquedas no distinguen entre mayúsculas y minúsculas (-i), etc.

15
Warren Young

Estoy respondiendo por csh:

Sí, puede usar los parámetros en alias y, como diferencia con lo que se ha dicho anteriormente, puede referirse a ellos en cualquier lugar de la definición de alias, no solo al final.

Ejemplo para tar-gz -ing algo:

$ alias tgz "tar cvf - \!:1 | gzip -9 > \!:2.tar.gz"

, dónde !:1 y !:2 son los parámetros que proporcionará cuando llame a su alias.

Ejemplo de uso:

    $ ls
    clrcf.dat                             user_comment_2016.06.03_12:51:50.txt  user_comment_2016.06.03_12:54:48.txt
        TEST-wADM.tec                         user_comment_2016.06.03_12:52:04.txt  user_comment_2016.06.03_12:55:13.txt


    $ tgz user* out
    a user_comment_2016.06.03_12:51:50.txt 1K
a user_comment_2016.06.03_12:52:04.txt 1K
a user_comment_2016.06.03_12:54:48.txt 1K
a user_comment_2016.06.03_12:55:13.txt 1K

    $ ls out*
    out.tar.gz

Lo que significa que usó dos parámetros que insertó en lugares arbitrarios del comando tar, convirtiéndolo en un alias tgz

1
stevica