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 に答える