Проблемы с расширением выражения в объекте JSON
Я пытаюсь использовать GitHub API для создания проблемы,
curl -u $username -d '{"title" : "Big Files List" , "body" : "'$(find -type f -size +1M)'", "label" : "big files" } $URL -k'
Тем не менее, я получил ответ, как
curl: (3) [globbing] unmatched close brace/bracket at pos 56
{
"message": "Invalid request.\n\nFor 'links/0/schema', \"body\" is not an
object.",
"documentation_url":
"https://developer.github.com/enterprise/2.15/v3/issues/#create-an-issue"
}
Так что проблема в $(find -type f -size +1M)
, когда я заменяю на строку, нет проблемы.
1 ответ
curl
возвращает несколько имен файлов, и пробел после первого имени файла заканчивается -d
аргумент, поэтому вы отправляете неполный JSON. Вы должны процитировать его, чтобы он не разделился.
Но этого недостаточно, потому что буквенные переводы строк также не допускаются в JSON. Вам нужно перевести переводы строк на \n
,
У вас также была заключительная кавычка не в том месте, она должна быть в конце JSON, а не в конце строки.
bigfiles=$(find -type f -size +1M)
bigfiles=${bigfiles// /\\n}
curl -u $username -d '{"title" : "Big Files List" , "body" : "'"$bigfiles"'", "label" : "big files" }' $URL -k