Em quase todos os casos em que você usa um loop for
do shell para processar as linhas em um arquivo de texto, é melhor usar awk
ou cut
ou sed
ou perl
(ou qualquer as outras ferramentas de processamento de texto disponíveis). Será mais rápido, mais fácil e sem risco de efeitos colaterais indesejados (como configurar o IFS antes de usar read
).
Por exemplo:
awk '{print "curl -XDELETE '\''ADDRESS:PORT/VALUE/VALUE/"$1"'\''"}' \
/tmp/filename |
sh
(execute sem tubulação para sh ou bash ou traço etc primeiro para verificar se ele produz a saída correta)
Isso faz o que você quer e envolve aspas simples em torno do URL para fornecer nomes de arquivos com espaços, curingas de glob, e comercial, ponto-e-vírgula etc. Funciona para todos os arquivos, exceto aqueles com aspas simples ou novas linhas no nome do arquivo. O último é unfixable com um arquivo de entrada separado por nova linha, mas o primeiro pode ser corrigido inserindo o seguinte antes da instrução print
:
gsub(/'\''/,"'"'\\''"'");
Recentemente, escrevi uma explicação do que isso faz aqui: link
awk '{ gsub(/'\''/,"'"'\\''"'");
print "curl -XDELETE '\''ADDRESS:PORT/VALUE/VALUE/"$1"'\''"}' \
/tmp/filename |
sh
Se você estiver absolutamente certo de que não haverá caracteres irritantes nos nomes dos arquivos, é ainda mais simples:
awk '{ print "curl -XDELETE ADDRESS:PORT/VALUE/VALUE/"$1 }' /tmp/filename | sh