
Quiero crear un alias para curl
el cual escribe automáticamente el archivo curl
en 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 wget
en 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 basename
o awk
algunas otras herramientas.
Alternativamente, siempre puedes apuntar curl
a wget
:
$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved