0

我正在使用的脚本:

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

有没有人经历过这种情况,这是怎么回事?

4

3 回答 3

1
DISKS=$(df -H | awk '{print $1}' | grep "/dev/" | sed 's/[/]/_/g' | sed 's/^.//' | sed 's/%$//');
while read i; rrdtool ...; done <<<"$DISKS"
于 2012-07-20T15:34:34.400 回答
0

我不熟悉,rrdtool但修复您的文件名可能会有所帮助。

do rrdtool create $(echo $i + "_usage.rrd")

打印出错误的值,尝试:

do rrdtool create $(echo "$i"_usage.rrd)

希望修复文件名(并从文件名中删除“+”符号和空格)将有助于清理它。

于 2012-07-20T15:21:16.590 回答
0

首先,您不需要命令替换来创建文件名:

rrdtool create "${i}_usage.rrd" ...

应该可以正常工作。

真正的问题似乎DISKS是没有按照您期望的方式进行拆分。尝试

DISKS=( $(your-pipeline-here) )
for i in "${DISKS[@]}"; do
  rrdtool create ...
done;

这会DISKS生成一个数组而不是空格分隔的字符串,让您可以遍历数组而无需(尽可能多地)担心IFS.

于 2012-07-20T15:30:15.983 回答