MySQL 输出重定向仅输出空行

问题描述 投票:0回答:1

我从以前的管理员那里继承了这个 bash 脚本,它从 CSV 文件获取输入。我正在修改它以将输出和错误消息输出到文本文件。但是,我得到的输出文件仅包含空行。想请问是否有人知道为什么会出现这种情况。预先感谢您的帮助。

#!/bin/bash

while read line; do

configname=$(echo "$line" | cut -d, -f1)
servicename=$(echo "$line" | cut -d, -f2)
oldcommand=$(echo "$line" | cut -d, -f3)
newcommand=$(echo "$line" | cut -d, -f4)

part1=$(echo -e "SELECT config_name,service_description,check_command FROM tbl_service")
part2=$(echo -e "WHERE config_name='$configname' and check_command='$newcommand' and service_description='$servicename'")

sqlquery=$(echo -e "$part1 $part2")

echo "$sqlquery"

output=$(echo "$sqlquery;" | mysql --host=localhost --user=sqluser --password='sqlpwd' sqldb1)
echo "$output" > Output.log 2> Error.log


done < "$1"

我不确定这个脚本有什么问题以及为什么它输出空行。

bash mysql-cli
1个回答
0
投票

正如约翰提到的,这个脚本有几个问题。我认为最大的问题是 mysql 命令的错误输出不会显示在“Error.log”文件中,因为错误输出不是从 mysql 命令本身捕获的。我建议不要将“output”变量设置为 mysql 命令的输出,而是执行以下操作:

echo "$sqlquery;" | mysql --host=localhost --user=sqluser --password='sqlpwd' sqldb1 >> Output.log 2>> Error.log

注意,我还将它附加到文件中,而不是每次运行时截断它们。这很重要,因为 mysql 的调用是在一个循环中,因此这两个文件中唯一可能的内容是来自最后一次运行,而不是来自所有运行。

说了这么多,这是脚本的替代方案:

#!/bin/bash

while read line; do

  configname=$(echo "$line" | cut -d, -f1)
  servicename=$(echo "$line" | cut -d, -f2)
#  oldcommand=$(echo "$line" | cut -d, -f3)  # Never used.
  newcommand=$(echo "$line" | cut -d, -f4)

  sqlquery="SELECT config_name,service_description,check_command FROM tbl_service WHERE config_name='$configname' and check_command='$newcommand' and service_description='$servicename'"

  echo "$sqlquery"   # Not really sure the purpose of this line.
  echo "$sqlquery" >> Output.log

  echo "$sqlquery;" | mysql --host=localhost --user=sqluser --password='sqlpwd' sqldb1 >> Output.log 2>> Error.log

done < "$1"

请注意,我将所有

variable=$(echo -e "some string with other variables")
更改为
variable="some string with another variables"
。 -e 选项确实会导致“echo”解释某些字符序列以输出控制字符,但我不知道这里将如何使用其中任何一个,所以我摆脱了它们。

您可能还会注意到,我添加了一个

echo "$sqlquery" >> Output.log
,因为我不知道将该字符串输出到标准输出有什么好处,而且我可以看到将其添加到文件中,这样您就可以知道每次运行何时开始。显然,如果不需要,请随意将其取出。

© www.soinside.com 2019 - 2024. All rights reserved.