脚本家ではありません。コマンドの実行にかかる時間を確認し、成功したかどうかを表示し、タイムスタンプを追加し、すべてをログファイルに追加するための繰り返しテストを作成しようとしています。
ああ、これはMacのbashにあります。
「実際」を分析し分析するために、以下を試みた。
time ./login.sh | sed -n 's/.*real://p' >> output.txt
または
(time ./login.sh) 1> /dev/null 2> output.txt
login.shスクリプトは、「成功」または「失敗」が追加された状態で実行されます。
application login -u "user" -p '******' "host.domain.com" | grep "Succeeded" &> /dev/null
if [ $? == 0 ]; then
echo " Suceeded" >> output.txt
else
echo " Failed" >> output.txt
fi
これらすべてをsleepコマンドでForループに入れて、5分ごとに発生させます。
for n in {1..1000};
do
# Command that Adds the time stamp
# the command to find the real time above once I get it working
sleep 5m
done
希望の出力は次のようになります。
Sun Jul 29 16:15:06 PDT 2019 real 0m0.815s Suceeded
Sun Jul 29 16:20:06 PDT 2019 real 0m0.635s Suceeded
Sun Jul 29 16:25:06 PDT 2019 real 0m1.053s Suceeded
Sun Jul 29 16:30:06 PDT 2019 real 0m15.653s Failed
ベストアンサー1
/usr/bin/time
シェル内蔵の代わりに使用してくださいtime
。次に、コマンドをstderr
別のファイルにキャプチャします。経過したリアルタイムは出力の最初の単語なので、使いやすいです。stdout
application
time
awk
grep
スイッチがあるため、-q
にリダイレクトする必要はありません/dev/null
。
最後に、数秒以内にパラメータを許可するので、これは望みどおりに機能しないようsleep
です。sleep 5m
しかし、構文は許可されるので、そのままにします。
for n in {1..1000}
do
/usr/bin/time application login -u "user" \
-p '******' "host.domain.com" > login.out 2>time.out
realtime=$(awk '{print $1}' time.out)
echo -n "$(date) real $realtime " >> output.txt
if grep -q "Succeeded" login.out; then
echo "Succeeded" >> output.txt
else
echo "Failed" >> output.txt
fi
sleep 5m
done