Не удалось получить значения в формате JSON из переменной

Вам необходимо понизить версию libc6до соответствующей версии для вашего дистрибутива:

sudo apt install libc6=2.27-3ubuntu1

Это, вероятно, не удастся из-за других неработающих зависимостей, вам также потребуется удалить или понизить их версию.

Wavemon доступен в Ubuntu 18.04, вы можете установить эту версию (0.8.1):

sudo apt install wavemon/bionic

Это позволит избежать загрузки версии libc6, которая не подходит для вашей системы.

0
28.09.2020, 11:14
3 ответа
encoded=`base64 -w0 < sampleData.txt`
scriptPayload='{"scriptText":"'"$encoded"'" }'
echo "$scriptPayload"

Попробуйте приведенный выше фрагмент кода. Причина, по которой ваша переменная не оценивалась, заключается в том, что вы инкапсулировали ее в одинарные кавычки. Я закрываю одинарную кавычку непосредственно перед переменной. Таким образом, оболочка распознает переменную и заменит ее фактическим содержимым.

0
18.03.2021, 23:01

Ваша строка для кодирования ничего не делала, я ее изменил. Кроме того, я также изменил строку для финала scriptPayloadи использовал экранирование.

#!/bin/bash
value=5
echo $value
encoded=`echo -n "$value" | base64`
scriptPayload="{\"scriptText\":\"${encoded}\" }"
echo $scriptPayload
0
18.03.2021, 23:01

В вашем скрипте есть синтаксическая ошибка (Не на самом деле, но он определенно не делает то, что вы думаете):

encoded= echo  $value | base64 

Если вы используете такую ​​оболочку, как bash, это может быть записано как

encoded=$( base64 <<<"$value" )

или даже

encoded=$( base64 <sampleData.txt )

, который фиксирует кодировку base64 -данных в файле sampleData.txtв переменную encodedс помощью подстановки команд, аналогично тому, как вы уже используете catв подстановке команд на ваша первая строка кода.

Поскольку переменные не раскрываются в строках с одинарными -кавычками, код

scriptPayload='{"scriptText":"$encoded" }'

не будет делать то, что вы думаете (он устанавливает scriptPayloadв литеральную строку{"scriptText":"$encoded" }).

В bashэто лучше записать как

printf -v scriptPayload '{"scriptText":"%s"}' "$encoded"

или

printf -v scriptPayload '{"scriptText":"%s"}' "$( base64 <sampleData.txt )"

Утилита printf, встроенная в bash, печатает непосредственно в переменную с помощью -v varname.

Обратите внимание, что некоторые реализации утилиты base64могут выдавать данные с окончаниями строки CRLF -.


Использованиеjo:

scriptPayload=$( jo scriptText=%sampleData.txt )
printf '%s\n' "$scriptPayload"

Аргумент scriptText=%sampleData.txtуказывает joсоздать объект JSON с ключом scriptText. Данные для этого ключа должны быть в кодировке base64 -содержимого файла sampleData.txt(. Это %решает, что он должен быть закодирован в base64 -).

С файлом sampleData.txt, содержащим строку Hello World(, за которой следует символ новой строки ), это выведет

{"scriptText":"SGVsbG8gV29ybGQK"}

jo— это инструмент для простого создания правильно закодированных данных JSON с кавычками в командной строке или в сценариях оболочки.

1
18.03.2021, 23:01

Теги

Похожие вопросы