这是我第一次尝试 BASH,我遇到了一个小问题。此脚本的目的是清理 ZFS 池并创建一个日志文件。
代码按预期工作,除了下面的第 19 行。(日志条目 $LOG_LINE)。我为调试目的添加了第 18 行,它正在工作。
第 18 行将“pool 'tankm' is healthy”写入日志,而第 19 行仅写入“pool”。从功能上讲,这些线在做同样的事情(至少在我看来),那么为什么一个工作而不是另一个工作。
我假设根本原因是 zpool status 命令输出中池名称之前的引号,并且我正在为此进行 char 替换,但我想了解这两行是如何以不同方式解释的。
提前感谢德克兰
#!/bin/bash
LOG_FILE=/home/declan/log/zfs_scrub
LOG_LAST=/home/declan/log/zfs_scrub_last
function LogEntry {
echo -e "$(date "+%Y %m %d %T") ; $1" >>$LOG_FILE 2>&1
}
cp $LOG_FILE $LOG_LAST
rm $LOG_FILE
LogEntry "Starting ZFS Scrub"
for POOL in $(zpool list -H -o name) ; do
LogEntry "Starting Scrub on $POOL"
zpool scrub $POOL 2>/dev/null
LOG_LINE=$(zpool status -x $POOL 2>&1)
echo -e "$(date "+%Y %m %d %T") ; $LOG_LINE" >>$LOG_FILE 2>&1
LogEntry $LOG_LINE
LogEntry "Ending Scrub on $POOL"
done
LogEntry "Ending ZFS Scrub"