Preciso modificar o conteúdo de um arquivo, com o seguinte comando sed (que funciona bem):
sed -i '[email protected].*@'"date.timezone = $TZ"'@' $PHP_INI_DIR/conf.d/symfony.ini
Esta linha deve ser injetada em um script antes de exec
:
#!/bin/sh
set -e
exec "$@"
Então eu preciso de outro sed para dizer "substituir antes exec
":
sed '/exec/i \sed -i '[email protected].*@'"date.timezone = $TZ"'@' $PHP_INI_DIR/conf.d/symfony.ini\n' docker-php-entrypoint
O problema são citações que não são produzidas :
#!/bin/sh
set -e
sed -i [email protected].*@"date.timezone = $TZ"@ $PHP_INI_DIR/conf.d/symfony.ini
exec
Colocar uma barra invertida \
antes '[email protected]
não faz nada. Alguma sugestão?
Este é um problema de shell. O shell faz "remoção de citações", então você precisa estudar como as aspas se comportam no shell. As aspas simples não podem ser aninhadas nem escapadas. Você tem que terminar a string entre aspas simples para inserir uma aspa simples.
Você pode usar aspas duplas dentro de aspas simples e vice-versa para escapar das aspas:
Dessa forma, as aspas simples escapam dentro das aspas simples e as aspas duplas são usadas dentro das aspas simples escapadas.