繁体   English   中英

sed 从文件中删除日志错误的实例,但前提是文件不存在?

Sed removing instances of log errors from a file, but only if the file doesn't exist?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

请注意:这纯粹是一个 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 项目,所以很明显他们知道他们在做什么。 看起来像它的说法:

  1. 检查名为MYSQL_LOG_CONSOLE的字符串变量是否不为空,或者硬编码的字符串文字“控制台”是否不为空
  2. 如果任一为真,然后搜索可用的挂载信息( proc/1/mounts )以查看其中是否引用了etc/my.cnf
  3. 如果etc/my.cnf不包含在proc/1/mounts ,则从etc/my.cnf删除所有log-error实例

首先,使用[ -n "console" ]检查字符串文字 "console" 是否为[ -n "console" ]什么意义? 非空字符串文字怎么可能是...空?

但我的主要问题是sed

sed -i 's/^log-error=/#&/' /etc/my.cnf

我是否正确解释了这个sed命令? 从文件中删除所有log-error实例...如果文件不存在?! 我显然错过了一些东西,只是不确定是什么。 提前致谢!

1 个回复

使用 [ -n "console" ] 检查字符串文字“console”是否为空有什么意义?

该文件是从模板生成的:

 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"

非空字符串文字怎么可能是...空?

不可能。

我是否正确解释了这个 sed 命令?

不。 sed命令不会删除这些行,它会在以log-error=开头的行前添加#

从文件中删除所有日志错误实例...

没有。

如果文件不存在?!

不,仅当文件未挂载时。

1 删除WordPress中不存在的CSS文件

我试图为divi图标安装插件,但未成功安装。 在首页https://www.example.com/wp-content/uploads/aspengrove-icons/multicolor.css?ver=1.1.1中添加了一个CSS文件。 该CSS文件不存在,我想将其删除,但是 ...

2 删除Git repo中的文件但文件不存在

在提交和推送到我的 repo 时,我收到以下错误: 问题是我已经手动删除了视频文件。 该视频在我的回购中的任何地方都不存在。 我还尝试git rm src/assets/video/Greensleeves并且它说fatal: pathspec src/assets/video/Greensle ...

3 sed从文件中删除文本

我有一个包含以下内容的日志文件 “ TSAGE_20160304193254_AAA_29792A_1103.tgz:二进制文件(标准输入)匹配 ” 我需要删除高达29792A的行的第一行,然后删除文本,因此文件如下所示: ...

4 仅当文件不存在时才会触发HttpHandler

我正在尝试创建一个HTTP处理程序来处理对文件夹的所有请求,但我只想在请求的文件不存在时触发它(EG:请求来自文件X,如果X存在我想要服务文件,否则处理程序应该处理它)。 这些文件只是静态内容,而不是脚本本身,我认为它使它更容易,但我似乎无法找到任何可以做到这一点的东西......任何人都 ...

5 仅在不存在的字符串中添加一个字符串

我在自学Java,遇到一个我不知道如何解决的问题。 我想基本上检查两件事:1.如果文件不存在-创建它! 如果可以,则什么也不做。 2.如果文件包含给定的字符串,则不执行任何操作(如果不包含该字符串)-添加它! (不要覆盖它)第二个更重要,但我也无法弄清楚第一个。 尝试在线查看如何确 ...

2019-09-13 10:37:38 2 76   java/ file
6 仅当文件不存在时如何创建文件?

我写了一个 UNIX 守护进程(针对 Debian,但它应该无关紧要),我想提供一些创建“.pid”文件(包含守护进程的进程标识符的文件)的方法。 我搜索了一种仅在文件不存在时打开文件的方法,但找不到。 基本上,我可以这样做: 但就目前而言,这段代码并没有以原子方式执行任务,这样做会很危险, ...

7 如果数据不存在,只写入文件?

我正在创建一个推送通知服务器,并将订阅存储在一个名为clients.json的 JSON 文件中。 这工作得很好,我可以使用fs.writeFile('clients.json', data, callback) ,它正在工作。 我遇到的问题是,如果 JSON 文件中有多个订阅实例,服务器会针对订阅 ...

8 仅在文件不存在时重写

我有一个 .htaccess 文件,如下所示: 我在我的 web 目录中有这个文件。 如果有文件,有没有办法强制此规则停止重写? 例如:我有一个 css/style.css 文件,但服务器返回 404,因为 mod_rewrite 规则有效。 如果我关闭 mod_rewrite,就会找到该文件 ...

9 仅当文件不存在时Ansible模板

我尝试仅在相应文件不存在的情况下设置模板。 我目前有以下始终创建文件的文件。 所以如果有三个模板 t1.j2 t2.j2 t3.j3 目标中存在两个文件 T1 T3 我只希望运行t2.j2模板并复制过来。 我已经看到了使 ...

2015-07-02 22:20:47 2 2223   ansible
10 htaccess仅在文件不存在时重写

使用.htaccess mod重写,我想重写一个url,检查该文件是否存在,如果没有使用在第一次重写期间删除的原始url的一部分再次重写到另一个url。 例如,如果原始URL是这样的 /images/3001/zebra.jpg 我想检查文件是否存在/images/cached ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM