我正在为备份解决方案编写新脚本。 现在,我想将在终端中看到的错误消息发送到日志文件。因此,我想将输出写入变量中。
我在其中写了一个错误。选项“默认文件”缺少“-”。
通过一个简单的示例,它可以工作:
#!/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
答案 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
重定向会导致错误消息转到标准输出文件描述符。 >
重定向使(原始)标准输出进入文件。