Bash:コマンド時間の「実際の」出力を解析し、出力文字列を調べ、タイムスタンプを追加して出力ファイルに送信します。

Bash:コマンド時間の「実際の」出力を解析し、出力文字列を調べ、タイムスタンプを追加して出力ファイルに送信します。

脚本家ではありません。コマンドの実行にかかる時間を確認し、成功したかどうかを表示し、タイムスタンプを追加し、すべてをログファイルに追加するための繰り返しテストを作成しようとしています。

ああ、これは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別のファイルにキャプチャします。経過したリアルタイムは出力の最初の単語なので、使いやすいです。stdoutapplicationtimeawk

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

おすすめ記事