Вам необходимо понизить версию libc6
до соответствующей версии для вашего дистрибутива:
sudo apt install libc6=2.27-3ubuntu1
Это, вероятно, не удастся из-за других неработающих зависимостей, вам также потребуется удалить или понизить их версию.
Wavemon доступен в Ubuntu 18.04, вы можете установить эту версию (0.8.1):
sudo apt install wavemon/bionic
Это позволит избежать загрузки версии libc6
, которая не подходит для вашей системы.
encoded=`base64 -w0 < sampleData.txt`
scriptPayload='{"scriptText":"'"$encoded"'" }'
echo "$scriptPayload"
Попробуйте приведенный выше фрагмент кода. Причина, по которой ваша переменная не оценивалась, заключается в том, что вы инкапсулировали ее в одинарные кавычки. Я закрываю одинарную кавычку непосредственно перед переменной. Таким образом, оболочка распознает переменную и заменит ее фактическим содержимым.
Ваша строка для кодирования ничего не делала, я ее изменил. Кроме того, я также изменил строку для финала scriptPayload
и использовал экранирование.
#!/bin/bash
value=5
echo $value
encoded=`echo -n "$value" | base64`
scriptPayload="{\"scriptText\":\"${encoded}\" }"
echo $scriptPayload
В вашем скрипте есть синтаксическая ошибка (Не на самом деле, но он определенно не делает то, что вы думаете):
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 с кавычками в командной строке или в сценариях оболочки.