Запись переменной в файл контейнера на определенной строке

Запись переменной в файл контейнера на определенной строке

Мне нужно записать переменную в файл, который находится в контейнере Docker на строке 31. Я использую скрипт bash

Моя команда:

txt=" 
log-bin
server_id=1"
docker exec $container sed -i "31i\
$txt /etc/mysql/my.cnf

Выдает такую ​​ошибку:

sed: -e expression #1, char 8: extra characters after command

и ничего не добавляется в мой файл...

Вы можете помочь?

решение1

Я ничего не знаю о контейнерах Docker, но если вам просто нужно вставить содержимое переменной перед определенной строкой, вы можете использовать следующую команду GNU sed.

VAR="$txt" sed -i.bk '31{h;s:.*:printf "%s" "$VAR":e;G}' /etc/mysql/my.cnf

В целях безопасности приведенная выше команда создает резервную копию входного файла с расширением .bk.

решение2

Спасибо за ответ. Он не работает как надо.

На самом деле это вставка пустой строки,

Если я попробую с

VAR="$txt" 
sed -i.bk '31{h;s:.*:printf "%s" "hello world":e;G}' /etc/mysql/my.cnf

оно работает

Если я попробую с

VAR="$txt" 
sed -i.bk '31{h;s:.*:printf "%s" "$VAR":e;G}' /etc/mysql/my.cnf

Я просто получаю новую пустую строку...

решение3

Ой, подождите, это всего лишь вопрос «и».

Это правильный синтаксис.

VAR="$txt"
docker exec  $container sed -i.bk "31{h;s:.*:printf '%s' '$VAR':e;G}" $path

Команду sed необходимо было заключить в двойные кавычки "", а аргументы intern - в одинарные кавычки '

Спасибо за все, приятель.

Связанный контент