Como POSTAR 'saída do shell' como dados JSON com Curl

1

Eu recebi o seguinte comando:

 curl -H 'Content-Type: application/json' -X POST -d '{"host": "'$(hostname)'"}' http://sitename.com/update.php

O que funciona como esperado, mas se eu tentar enviar a saída uptime em vez de hostname , obtenho:

curl: (6) Could not resolve host: 19:12; Name or service not known
curl: (6) Could not resolve host: up; Name or service not known
curl: (7) Failed to connect to 0.0.0.4: Invalid argument
curl: (6) Could not resolve host: days,; Name or service not known
curl: (6) Could not resolve host: 5:57,; Name or service not known
curl: (7) Failed to connect to 0.0.0.3: Invalid argument
curl: (6) Could not resolve host: users,; Name or service not known
curl: (6) Could not resolve host: load; Name or service not known
curl: (6) Could not resolve host: average; Name or service not known
curl: (6) Could not resolve host: 0.07,; Name or service not known
curl: (6) Could not resolve host: 0.05,; Name or service not known
curl: (3) [globbing] unmatched close brace/bracket at pos 6

O obvius é causado por espaços, mas como posso escapá-los?

Eu posso remover espaços com awk :

 curl -H 'Content-Type: application/json' -X POST -d '{"uptime": "'$(uptime | awk '{print $3$4}')'"}' http://sitename.com/update.php

Isso me dá "4 dias", mas deve haver uma solução melhor para isso: D

    
por Mc Kernel 29.11.2016 / 19:26

1 resposta

2

Usar um tipo de citação é mais simples e resolve esse problema;

curl -H "Content-Type: application/json" -X POST -d "{\"uptime\": \"$(uptime)\"}" "http://sitename.com/update.php"

ou você pode usar dois tipos de citação, mas é menos elegante;

curl -H 'Content-Type: application/json' -X POST -d '{"uptime": "'"$(uptime)"'"}' 'http://sitename.com/update.php'
    
por 29.11.2016 / 19:40