我需要使用以下 sed 命令修改文件的内容(效果很好):
sed -i '[email protected].*@'"date.timezone = $TZ"'@' $PHP_INI_DIR/conf.d/symfony.ini
此行应在脚本之前注入exec
:
#!/bin/sh
set -e
exec "$@"
所以我需要另一个 sed 来说“替换之前exec
”:
sed '/exec/i \sed -i '[email protected].*@'"date.timezone = $TZ"'@' $PHP_INI_DIR/conf.d/symfony.ini\n' docker-php-entrypoint
问题是未输出的引号:
#!/bin/sh
set -e
sed -i [email protected].*@"date.timezone = $TZ"@ $PHP_INI_DIR/conf.d/symfony.ini
exec
\
在前面加一个反斜杠'[email protected]
什么都不做。有什么建议吗?
这是一个外壳问题。shell 执行“引号删除”,因此您需要研究引号在 shell 中的行为方式。单引号不能嵌套或转义。您必须结束单引号字符串才能插入单引号。
您可以在单引号内使用双引号,反之亦然来转义引号:
这样,单引号在单引号内转义,双引号在转义的单引号内使用。