¿Comando de alias que reconoce argumentos?

¿Comando de alias que reconoce argumentos?

Quiero crear un alias para curlel cual escribe automáticamente el archivo curlen un archivo con el mismo nombre en el directorio actual.

Por ejemplo:

% curl https://bootstrap.pypa.io/get-pip.py
    curl https://bootstrap.pypa.io/get-pip.py > get-pip.py

¿Hay alguna manera de hacer que el alias lea el siguiente argumento y lo inserte en el script ejecutado real de esta manera?

Respuesta1

Los alias no manejan argumentos. Afortunadamente, las funciones hacen:

mycurl () {
    curl "$1" > "${1##*/}"
}

¿Dónde ${1##*/}hay una forma de expansión de parámetros que dice "Eliminar todo hasta la última barra en $1"?

Respuesta2

Si ustednecesariopara hacer esto, lo haría con una función bash o (en circunstancias aún más complicadas) en su propio archivo de script en ~/bin/...

Pero podrías usarlo wgeten lugar de curl. Debería hacer lo que estás pidiendo de forma predeterminada y, como beneficio adicional, podrás evitar el problema de una URL sin un archivo específico (por ejemplo:) http://example.com/.

Respuesta3

Existen algunas soluciones en las que puede utilizar una combinación de variables de entorno ( PWD), sustituciones de comandos o redirecciones de E/S dentro de los alias. Aquí hay un ejemplo más cercano (en Bash):

alias curl='xargs -I% curl -o "%" "%" <<<'

que guardará el archivo con el mismo nombre que la URL:

$ curl https://bootstrap.pypa.io/get-pip.py
Warning: Failed to create the file https://bootstrap.pypa.io/get-pip.py

Esto se puede corregir aún más convirtiendo esa URL en nombre de archivo mediantemanipulando cuerdausando operaciones de shell, sustitución de comandos basenameo awkalgunas otras herramientas.

Alternativamente, siempre puedes apuntar curla wget:

$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved

información relacionada