我正在使用的脚本:
DISKS=$(df -H | awk '{print $1}' | grep "/dev/" | sed 's/[/]/_/g' | sed 's/^.//' | sed 's/%$//')
IFS="\n\b"
for i in $DISKS; do
rrdtool create $(echo $i + "_usage.rrd") --start $(date +%s) DS:used:GAUGE:240:U:U RRA:MAX:0.5:1:144 RRA:MAX:0.5:1:1008 RRA:MAX:0.5:1:8640
done;
命令行上的文件:
dev_sda2?dev_sdd1?dev_sdc1?dev_mapper_truecrypt1?dev_mapper_truecrypt2 + _usage.rrd
之前有没有人经历过这种情况,发生了什么?
答案 0 :(得分:1)
DISKS=$(df -H | awk '{print $1}' | grep "/dev/" | sed 's/[/]/_/g' | sed 's/^.//' | sed 's/%$//');
while read i; rrdtool ...; done <<<"$DISKS"
答案 1 :(得分:0)
我不熟悉rrdtool
,但修复文件名可能会有所帮助。
do rrdtool create $(echo $i + "_usage.rrd")
打印出错误的值,请尝试:
do rrdtool create $(echo "$i"_usage.rrd)
希望修复文件名(并从文件名中删除'+'符号和空格)将有助于清理它。
答案 2 :(得分:0)
首先,您不需要命令替换来创建文件名:
rrdtool create "${i}_usage.rrd" ...
应该可以正常工作。
真正的问题似乎是DISKS
没有像你期望的那样分裂。尝试
DISKS=( $(your-pipeline-here) )
for i in "${DISKS[@]}"; do
rrdtool create ...
done;
这使得DISKS
成为一个数组,而不是一个以空格分隔的字符串,让您迭代数组而不必担心(尽可能多)IFS
的值。