Incorporar “arquivo cat” em dados CURL

3

Gostaria de acionar o conteúdo de um file.txt e usá-lo como parte do campo --data da minha consulta curl.

Eu tentei:

curl ... --data '{ "file_content":[" $(cat file.txt) ", ...]}"' ...

mas que passa a string $(cat file.txt) para o servidor em vez de interpretá-la antes de enviá-la.

Eu também tentei:

curl ... --data '{ "file_content":[" 'cat file.txt' ", ...]}"' ...

Novamente, passa a string como está, em vez de interpretá-la.

    
por Juicy 21.07.2015 / 17:53

2 respostas

5

Você provavelmente não precisaria de 3 dessas barras invertidas se puder remover o shell da equação. Felizmente, você pode:

{   printf '{ "file_content":["'
    cat file.txt
    printf '", ...]}"'
}|  curl ... --data-binary @-          

Veja man curl . Sugiro que preste muita atenção às diferenças entre --data-ascii (que é o que -d significa) , --data-binary e --data-urlencoded .

    
por 21.07.2015 / 19:40
1

Para permitir que o shell interprete o $ (...) ou backticks, você precisa parar de citá-lo:

curl ... --data '{ "file_content":["' $(cat file.txt) '", ...]}"' ...

ou

curl ... --data '{ "file_content":["' 'cat file.txt' '", ...]}"' ...
    
por 21.07.2015 / 18:24