Tenho um arquivo no qual quero inserir a string abaixo:
export TRUSTED_PROXIES='"172.16.0.0/12, 172.17.0.0/12"'
[root@sasasas]# echo $TRUSTED_PROXIES
"172.16.0.0/12, 172.17.0.0/12"
Mas estou recebendo este erro:
[root@sasasas]# sed -i '2i trusted_proxies ='$TRUSTED_PROXIES'' log.conf
sed: can't read 172.17.0.0/12": No such file or directory
Porém, se eu executar o comando abaixo com o valor real ele funciona:
sed -i '2 i trusted_proxies =172.16.0.0/12, 172.17.0.0/12' log.conf
Como posso escapar dos valores da variável env separados por vírgula e inserir em um arquivo? Estou usando Linux.
Comando que tentei são os seguintes
sed -i '2i trusted_proxies ='$TRUSTED_PROXIES'' log.conf
sed -i '2i trusted_proxies ="$TRUSTED_PROXIES"' log.conf
sed -i "2i trusted_proxies ='$TRUSTED_PROXIES'" log.conf
sed -i "2i trusted_proxies ="$TRUSTED_PROXIES"" log.conf
Como sua variável contém espaços e você a está passando sem aspas, o shell tenta expandi-la e o que
sed
realmente vê é o segundo valor como um arquivo. Isso provavelmente é mais fácil de entender se você executarset -x
para poder ver o comando expandido executado pelo shell:Como você pode ver acima, o comando real que está sendo executado é:
Então
sed
está procurando um arquivo chamado'172.17.0.0/12"'
. A correção é colocar aspas duplas na variável:Ou, mais simplesmente, coloque aspas duplas em todo o
sed
comando e use aspas simples em torno do valor impresso: