使ってみようこのコード(ローカルサーバーで動作)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;}'`
英語サーバーまたはフランス語サーバーで動作します。 ;)