comando de alias com reconhecimento de argumento?

comando de alias com reconhecimento de argumento?

Quero criar um alias para curlo qual grave automaticamente o arquivo curlem 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 wgetem 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 basenameou awkalgumas outras ferramentas.

Alternativamente, você sempre pode apontar curlpara wget:

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

informação relacionada