這是我第一次嘗試BASH,我遇到了一個小問題。 該腳本的目的是清理ZFS池並創建一個日誌文件。BASH pass變量到函數
該代碼正常工作,除了第19行以下。 (LogEntry $ LOG_LINE)。 我添加了第18行用於調試目的,它工作。
第18行寫入「pool」tankm'健康「到日誌,而第19行只有wirtes」pool「。在功能上,這些線路正在做同樣的事情(至少對我來說),所以爲什麼一個人會工作,而不是另一個。
我假設root casue是在zpool status命令的輸出中的池名之前的引號,我正在爲這個char替換而工作,但我會想知道這兩行是如何被interprited不同。
在此先感謝 德克蘭
#!/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"
謝謝 我並不是真的在找工作,第18行是我的工作。我想知道爲什麼第19行不行。 – 2013-04-26 18:00:56
@chepner有它 - 圍繞變量名添加引號是解決方案。 – 2013-04-26 18:29:12