首页 > 解决方案 > 变量输出

问题描述

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

我在里面写了一个错误。选项“defaults-file”缺少“--”。

通过一个简单的示例,它起作用了:

#!/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

标签: bashshell

解决方案


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

在变量中捕获标准输出以便您可以echo将该变量转换为标准输出无论如何都是一种反模式(如果您不使用双引号将字符串 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重定向导致错误消息转到标准输出文件描述符。重定向导致(原始>)标准输出转到文件。


推荐阅读