SSHを介してリモートサーバーでdfを使用し、利用可能なサイズを取得します。

SSHを介してリモートサーバーでdfを使用し、利用可能なサイズを取得します。

使ってみようこのコード(ローカルサーバーで動作)SSH経由のリモートサーバーで

df |tail -n +2 | awk '{if ($6 == "/var") print $2; }'

私のコードは次のとおりです

function dst_request {
# Effectue une requete sur la destination
local RESULT
if [ ${hostssh} ]
then # Destination SHH
  RESULT=$( ssh ${userssh}@${hostssh} "eval ${1}" )
else # Destination locale
echo "APPEL LOCAL"
  RESULT=$( eval ${1} )
fi
echo ${RESULT}
}

#place utilisée sur le disque distant
dddistantsize=$(dst_request "df")
echo ${dddistantsize}
dddistantsize_n=`echo ${dddistantsize} |tail -n +2 | awk '{if ($6 == "/var") print $2; }'`
echo "dddistantsize_n="${dddistantsize_n}
dddistantsize_mb=$(($dddistantsize_n/1024))

dddistantused=$(dst_request "df")
echo ${dddistantused}
dddistantused_n=`echo ${dddistantused} |tail -n +2 | awk '{if ($6 == "/var") print $3; }'`
echo "dddistantused_n="${dddistantused_n}
dddistantused_mb=$(($dddistantused_n/1024))

dddistantdispo=$(dst_request "df")
echo ${dddistantdispo}
dddistantdispo_n=`echo ${dddistantdispo} |tail -n +2 | awk '{if ($6 == "/var") print $4; }'`
echo "dddistantdispo_n="${dddistantdispo_n}
dddistantdispo_mb=$(($dddistantdispo_n/1024))

dddistantprcused=$(dst_request "df")
dddistantdispo_n=`echo ${dddistantprcused} |tail -n +2 | awk '{if ($6 == "/var") print $5; }'`

echo "Disque distant : "${dddistantused_mb}"Mb"/${dddistantsize_mb}"Mb plein à "${dddistantdispo_n}" (Libre ${dddistantdispo_mb}Mb)"

問題は、リモート呼び出しが(ローカルの複数行の結果の代わりに)1行の結果を再送信し、awkがそれを解析できないことです。

私が正確に言うのは、リモートdfが--outputオプションをサポートしていないということです。

ベストアンサー1

解決策が見つかりました

dddistantdf=$(dst_request "df /var")
#echo $dddistantdf | grep -o '[0-9]* [0-9]* [0-9]* *[0-9]*%'
dddistantsize_n=`echo $dddistantdf | grep -o '[0-9]* [0-9]* [0-9]* *[0-9]*%' | awk '{print $1;}'`
dddistantused_n=`echo $dddistantdf | grep -o '[0-9]* [0-9]* [0-9]* *[0-9]*%' | awk '{print $2;}'`
dddistantdispo_n=`echo $dddistantdf | grep -o '[0-9]* [0-9]* [0-9]* *[0-9]*%' | awk '{print $3;}'`
dddistantdispo_prc=`echo $dddistantdf | grep -o '[0-9]* [0-9]* [0-9]* *[0-9]*%' | awk '{print $4;}'`

英語サーバーまたはフランス語サーバーで動作します。 ;)

おすすめ記事