argumento-aware alias?

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?

    
por Eric Dand 15.05.2014 / 09:41

3 respostas

3

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".

    
por choroba 15.05.2014 / 09:55
2

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/ ).

    
por Oli 15.05.2014 / 10:21
0

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
    
por kenorb 26.02.2016 / 00:52