
Quero criar um alias para curl
o qual grave automaticamente o arquivo curl
em um arquivo com o mesmo nome no diretório atual.
Por exemplo:
% curl https://bootstrap.pypa.io/get-pip.py
curl https://bootstrap.pypa.io/get-pip.py > get-pip.py
Existe uma maneira de fazer o alias ler o seguinte argumento e inseri-lo no script executado como este?
Responder1
Aliases não lidam com argumentos. Felizmente, as funções fazem:
mycurl () {
curl "$1" > "${1##*/}"
}
Onde ${1##*/}
está uma forma de expansão de parâmetros que diz "Remova tudo até a última barra em $ 1".
Responder2
Se vocênecessáriopara fazer isso, eu faria isso com uma função bash ou (em circunstâncias ainda mais complicadas) em seu próprio arquivo de script em ~/bin/
...
Mas você poderia simplesmente usar wget
em vez de curl
. Ele deve fazer o que você está pedindo por padrão e, como bônus adicional, você poderá evitar o problema de uma URL sem um arquivo especificado (por exemplo: http://example.com/
).
Responder3
Existem algumas soluções alternativas, onde você pode usar combinações de variáveis de ambiente ( PWD
), substituições de comandos ou redirecionamentos de E/S dentro dos aliases. Aqui está um exemplo mais próximo (no Bash):
alias curl='xargs -I% curl -o "%" "%" <<<'
que salvará o arquivo com o mesmo nome do URL:
$ curl https://bootstrap.pypa.io/get-pip.py
Warning: Failed to create the file https://bootstrap.pypa.io/get-pip.py
Isso pode ser corrigido convertendo esse URL em nome de arquivo pormanipulando cordausando operações de shell, substituição de comandos basename
ou awk
algumas outras ferramentas.
Alternativamente, você sempre pode apontar curl
para wget
:
$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved