[英]Sed removing instances of log errors from a file, but only if the file doesn't exist?
请注意:这纯粹是一个 bash 脚本和sed
问题,尽管它提到了一些其他技术(MySQL、Docker 等)。
查看在官方MySQL 8.0 Dockerfile构建时运行的bash 脚本,我看到了:
if [ -n "$MYSQL_LOG_CONSOLE" ] || [ -n "console" ]; then
# Don't touch bind-mounted config files
if ! cat /proc/1/mounts | grep "etc/my.cnf"; then
sed -i 's/^log-error=/#&/' /etc/my.cnf
fi
fi
......我试图理解它的作用。 有些事情对我来说没有意义,但这是来自官方 MySQL Docker 项目,所以显然他们知道他们在做什么。 它看起来像它的说法:
MYSQL_LOG_CONSOLE
的字符串变量是否不是 null,或者硬编码字符串文字“console”是否不是 nullproc/1/mounts
)以查看其中是否引用了etc/my.cnf
etc/my.cnf
不包含在proc/1/mounts
中,则从etc/my.cnf
中删除所有log-error
实例首先,使用[ -n "console" ]
检查字符串文字 "console" 是否为 null 有什么意义? 非空字符串文字怎么可能是...null?
但我的主要问题是sed
:
sed -i 's/^log-error=/#&/' /etc/my.cnf
我是否正确解释了这个sed
命令? 从文件中删除所有log-error
实例......如果文件不存在?,我显然错过了一些东西。 只是不确定是什么。 提前致谢!
使用 [ -n "console" ] 检查字符串文字“console”是否为 null 有什么意义?
该文件是从模板生成的:
if [ -n "$MYSQL_LOG_CONSOLE" ] || [ -n "%%DEFAULT_LOG%%" ]; then
默认情况下,登录到控制台仅在 mysql 8 中启用,从生成脚本:
declare -A DEFAULT_LOG DEFAULT_LOG["5.6"]="" DEFAULT_LOG["5.7"]="" DEFAULT_LOG["8.0"]="console"
非空字符串文字怎么可能是...null?
它不可能是。
我是否正确解释了这个 sed 命令?
不。 sed
命令不会删除这些行,它会在以log-error=
开头的行前面添加#
。
从文件中删除所有日志错误实例...
不。
如果文件不存在?!
不,仅当文件未挂载时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.