Os aliases não lidam com argumentos. Felizmente, as funções fazem:
mycurl () {
curl "" > "${1##*/}"
}
Onde ${1##*/}
é uma forma de Expansão de Parâmetro que diz "Remover tudo para a última barra em $ 1".
Eu quero criar um alias para curl
, que grava automaticamente o arquivo curl
s 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?
Os aliases não lidam com argumentos. Felizmente, as funções fazem:
mycurl () {
curl "" > "${1##*/}"
}
Onde ${1##*/}
é uma forma de Expansão de Parâmetro que diz "Remover tudo para a última barra em $ 1".
Se você precisava para 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ê pode usar apenas wget
em vez de curl
. Ele deve fazer o que você está pedindo por padrão e, como um bônus adicional, você terá que contornar o problema que é uma URL sem um arquivo especificado (por exemplo: http://example.com/
).
Existem algumas soluções alternativas, nas quais você pode usar a combinação 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 da 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 ainda mais convertendo esse URL em nome de arquivo por manipulação de string usando operações de shell, substituição de comandos, basename
, awk
ou algumas outras ferramentas.
Como alternativa, você pode sempre apontar seu curl
para wget
:
$ alias curl=wget
$ curl https://bootstrap.pypa.io/get-pip.py
'get-pip.py' saved