![在 shell 脚本中禁止来自 MySQL 的警告消息,但允许错误](https://linux22.com/image/89932/%E5%9C%A8%20shell%20%E8%84%9A%E6%9C%AC%E4%B8%AD%E7%A6%81%E6%AD%A2%E6%9D%A5%E8%87%AA%20MySQL%20%E7%9A%84%E8%AD%A6%E5%91%8A%E6%B6%88%E6%81%AF%EF%BC%8C%E4%BD%86%E5%85%81%E8%AE%B8%E9%94%99%E8%AF%AF.png)
当使用一些底层 MySQL 命令运行 shell 脚本时,我的日志文件被转储并显示以下消息。
这是消息:
“警告:在命令行界面上使用密码可能不安全。”
为了停止这些消息,我使用以下作业定义。
例子:
run_wrapper.sh |grep -v "Warning: Using a password" > output.log 2>&1
这有效,但 MySQL 错误没有被记录到output.log
.
如果我像下面这样更改定义,那么 MySQL 错误就会开始出现(如果有)
run_wrapper.sh > output.log 2>&1
所以问题是如何仅使用 cron 定义来抑制警告消息并在日志文件中报告 SQL 错误?
答案1
在 bash 脚本中,在顶部编辑它
export MYSQL_PWD=yourdbpassword
和 mysql 查询如下:mysql -u username -h host db -e "statement"
参考:来自发布于的答案堆栈溢出。也可以遵循其他答案。
答案2
在包装器中搜索类似于以下内容的行
mysql -u<username> -p<some_password> -hlocalhost -D<database_name>
并更改为
export MYSQL_PWD=<some_password> ; mysql -u<username> -hlocalhost -D<database_name>
这解决了警告的来源。
答案3
看来你错过了标准错误从自身重定向run_wrapper.sh
,因此错误不会通过grep
并到达日志文件。
如果您很高兴两者兼而有之,请尝试此操作标准输出和特殊错误写入您的日志文件
run_wrapper.sh 2>&1 | grep -v "Warning: Using a password" > output.log
或者,如果您只想将错误写入日志文件,并且标准输出离开写入呼叫终端,试试这个
( run_wrapper.sh 2>&1 1>&3 | grep -v "Warning: Using a password" > output.log ) 3>&1
答案4
尝试将其添加到命令末尾:
/dev/null 2>&1