Existem alguns erros no seu código:
- Você define
file
na linha 2, mas não o usa no loop. - Colocar
$
na frente das coisas fará com que o shell tente substituí-lo, o que provavelmente não é o que você deseja quando executar$http
ou$/Users
. - Você define
outfile
em seu loop, mas não o usa. Talvez você quisesse colocá-lo após o-o
na sua linha de onda. - O argumento
-o
para curl deve ser um nome de arquivo, mas você coloca o URL lá. - O URL base (
http://www.example.com/images
) e a parte que você adiciona a ele precisam estar no mesmo argumento, não separados por um espaço que fará o shell pensar que são necessários dois argumentos.
Então acabo com:
#!/bin/bash
filename=./extensions.txt
while read line || [[ -n "$line" ]]; do
echo downloading $line
curl -o $line "http://example.com/$line"
done < "$filename"
Se você colocar isso em um nome de arquivo read_examp
e torná-lo executável, poderá ver como funciona:
chicks$ cat extensions.txt
foo
bar
baz
chicks$ ./read_examp
foo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 41794 0 --:--:-- --:--:-- --:--:-- 42333
bar
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 53987 0 --:--:-- --:--:-- --:--:-- 55217
baz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1270 100 1270 0 0 48366 0 --:--:-- --:--:-- --:--:-- 48846
chicks$ ls -l 'cat extensions.txt'
-rw-r--r-- 1 chicks staff 1270 Oct 7 10:01 bar
-rw-r--r-- 1 chicks staff 1270 Oct 7 10:01 baz
-rw-r--r-- 1 chicks staff 1270 Oct 7 10:01 foo
Observação: você menciona os CSVs, mas seu código de exemplo parece não lidar com isso. Você pode estender isso com algo como este para extrair um campo do seu CSV em vez de usando toda a linha.