
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