我正在编写一个用于日志存储备份的 bash 脚本。
我使用我定义的函数如下:
logit () { echo " $1 $2 " >> /path/to/log }
因为
logit 'Starting Backup' $(date +'%D %T')
我得到这个输出:Starting Backup 01/11/22
所以时间不见了,显然该
stdout
功能已经缩短了它。有了
echo $(date +'%D %T')
我也得到了时间stdout
。我还想使用我的日志功能,例如
logit 'DB-LOGS' $(cat /path/to/sql)
结果是
DB-LOG mysqldump:
同样,这里缺少一些标准输出。
我应该更改或添加什么到函数中以获得完整的输出?
答案1
双引号命令替换:
logit 'Starting Backup' "$(date +'%D %T')"
如果没有引号,结果会$(date ...)
经过分词和文件名通配。没有缩短:假设$IFS
仍然设置为其默认值(其中包含空格字符),日期和时间作为单独的参数传递给函数,最终$3
您不使用时间。
答案2
您可以"$*"
在脚本中使用将所有参数连接到一个字符串。
logit () {
echo " $* " >> /path/to/log
}
("$*"
使用第一个字符IFS
作为连接符,默认为空格。)
或者,如果您想要每个参数周围有额外的空格,请使用printf
with "$@"
:
logit () {
{ printf " %s " "$@"; echo; } >> /path/to/log
}
(在这里,"$@"
分别扩展到每个参数,并printf
根据需要重复格式字符串多次。echo
添加最后的换行符。)