不是剧本人。我正在尝试构建一个重复测试,以查看命令运行需要多长时间,标记它是否成功,并添加时间戳,并将所有内容附加到日志文件中。
哦,这是在 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
而不是 shell 内置的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
答案2
不要 grep/awk/sed,只使用时间的格式选项,例如time -f "%e" command
将仅输出命令所花费的实际秒数,仅此而已。