
Мне нужно записать переменную в файл, который находится в контейнере 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 - в одинарные кавычки '
Спасибо за все, приятель.