Isso ocorre porque é como curl
é projetado.
Você pode, no entanto, conseguir gravar no diretório de saída por meio do redirecionamento de shell. Exemplo:
$ curl http://example.com/file > /path/to/destination/file
A entrada man curl
para curl -O
diz:
If you want the file saved in a different directory, make sure you change cur‐ rent working directory before you invoke curl with the -O, --remote-name flag!
Por que não é possível baixar o arquivo para um diretório específico e é preciso fazer cd /example
para baixar o arquivo para um diretório específico?
Eu sei que é possível com wget
desta maneira:
wget -P /example https://example.com/file
Mas eu me pergunto por que aparentemente não é com curl
.
Why it isn't possible to download the file to a specific directory and one has to do cd /example to download the file to a specific directory?
Porque o curl foi projetado dessa maneira. Como é o software livre , você pode baixar o código-fonte (talvez com git clone https://github.com/curl/curl.git
) e estudá-lo. Você descobrirá que a chamada de sistema chdir (2) nunca é usada nela (aparece apenas nos scripts de teste codificados em Perl).
Se você não quiser explicitamente cd
em seu shell antes de usar curl
, poderá usar outra coisa ou corrigir o código-fonte curl
para adicionar essa opção (por exemplo, você pode melhorar seu código para aceite a opção de programa --chdir
dirname e, em seguida, chame o chdir
syscall ; minha opinião não vale o esforço). Lembre-se de que cada processo tem seu próprio trabalho de trabalho (herdado de seu processo pai). Veja também credenciais (7) e leia alguns livros de programação do Linux (talvez o antigo, mas livre para download, ALP ; também intro(2) & syscalls (2) )
É claro que você pode usar curl
somente com caminhos absolutos (considere usar realpath (1) em seus scripts de shell, ou realpath (3) em seus programas em C , para obter um) ..
Você também pode e muito mais simplesmente agrupar curl
em algum script de shell fazendo o que deseja; talvez algum script incurl
seja tão simples como:
#!/bin/sh
# this is your incurl shell script
cd "$1"
shift
exec curl "$@"
que você usará, por exemplo com incurl /tmp/ -O foo http://example.com/path/foobar.txt
(para obter alguns /tmp/foo
desse URL).
Você também pode usar a biblioteca libcurl , talvez de alguma linguagem de script (como Guile , Python , Lua , Perl , etc ...), ou de um programa escrito em uma linguagem implementada por compiladores (Rust, Go, C ++, C, Ocaml, ....). Você pode até encontrar outras bibliotecas cliente HTTP (e também bibliotecas de servidores HTTP).
Por que os criadores de curls não pensaram em mais recursos, sinos e assobios, leia sobre a filosofia Unix . curl
é um software de linha de comando que faz uma coisa, mas faz bem. Você vai compor ou embrulhar com outros utilitários (talvez tão simples quanto o script incurl
acima) para obter mais recursos. E, infelizmente, curl
também não faz o seu café da manhã.
PS. Eu suponho que você esteja usando algum sistema operacional POSIX ou Unix, como Linux, MacOSX, AIX, ...
Tags directory wget curl cd-command download