Escrevendo uma variável em um arquivo de contêiner em uma determinada linha

Escrevendo uma variável em um arquivo de contêiner em uma determinada linha

Preciso escrever uma variável em um arquivo que está em um contêiner docker na linha 31. Eu uso um script bash

meu comando é:

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

Produziu este erro:

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

e nada é adicionado ao meu arquivo ...

Você pode ajudar?

Responder1

Não sei nada sobre contêineres docker, mas se tudo que você deseja é inserir o conteúdo de uma variável antes de uma determinada linha, você pode usar o seguinte comando GNU sed.

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

Por segurança, o comando acima cria um backup do arquivo de entrada com extensão .bk.

Responder2

Obrigado pela sua resposta. Isso não está funcionando direito.

Na verdade, ele insere uma linha vazia,

Se eu tentar com

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

funciona

Se eu tentar com

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

Acabei de receber uma nova linha vazia ...

Responder3

Ah, espere, é só uma questão de "e'

Esta é a sintaxe correta

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

O comando sed teve que ser colocado entre aspas duplas "" e os argumentos intern com aspas simples '

Obrigado por tudo companheiro

informação relacionada