输出可变

时间:2019-02-19 07:35:36

标签: bash shell

我正在为备份解决方案编写新脚本。 现在,我想将在终端中看到的错误消息发送到日志文件。因此,我想将输出写入变量中。

我在其中写了一个错误。选项“默认文件”缺少“-”。

通过一个简单的示例,它可以工作:

#!/bin/bash
log=$(date)
echo $log

这是代码段:

#!/bin/bash
DATE=`date +\%Y\%m\%d\%H\%M\%S`.sql
log=$(`mysqldump defaults-file=/home/user/.my.cnf cloud > backup_$DATE`)

echo $log

1 个答案:

答案 0 :(得分:2)

您没有在log中捕获任何字符串,因为您的mysql命令正在将其所有标准输出发送到文件中。

将标准输出捕获到变量中,以便无论如何echo将该变量转换为标准输出都是反模式(和bug if you don't double-quote the string you echo)

如果要将标准错误输出重定向到标准输出,请使用另一种重定向。

#!/bin/bash
# Also, don't use uppercase for private variables
# and prefer $(command) over obsolescent `command`
date=$(date +%Y%m%d%H%M%S).sql
mysqldump defaults-file=/home/user/.my.cnf cloud 2>&1 > "backup_$DATE"

2>&1重定向会导致错误消息转到标准输出文件描述符。 >重定向使(原始)标准输出进入文件。