137 lines
2.8 KiB
Markdown
137 lines
2.8 KiB
Markdown
+++
|
|
date = "2021-01-19"
|
|
tags = ["mac","shell"]
|
|
title = "macでtimeコマンドを使ってみる"
|
|
slug = "shell"
|
|
+++
|
|
|
|
`coreutils`になかったのですが、`gnu-time`でインストールできます。
|
|
|
|
mac標準は、`/usr/bin/time`にありますが、ほとんどのオプションが機能せず、あまり使えません。
|
|
|
|
```sh
|
|
$ brew install gnu-time
|
|
$ gtime -f "%e" read
|
|
```
|
|
|
|
これによって、ストップウォッチとして使えますし、任意のタイミングで実行時間を計測して記録できるので、色々と便利です。
|
|
|
|
例えば、任意のコマンドを指定した間隔で実行してみます。
|
|
|
|
```sh
|
|
#/bin/zsh
|
|
time=time.txt
|
|
json=command.json
|
|
echo "[s]ave, [l]oad"
|
|
case $1 in
|
|
s)
|
|
if [ -f $json ];then
|
|
rm $json
|
|
fi
|
|
echo "[" >> $json
|
|
while :
|
|
do
|
|
echo "command?, [s]top"
|
|
read key
|
|
case $key in
|
|
s)
|
|
echo "{\"command\":\"\",\"time\":\"\"}]" >> $json
|
|
exit
|
|
;;
|
|
*)
|
|
echo "time enter"
|
|
gtime -f "%e" -o $time read
|
|
cti=`cat $time`
|
|
echo "{\"command\":\"$key\",\"time\":\"$cti\"}," >> $json
|
|
;;
|
|
esac
|
|
done
|
|
;;
|
|
l)
|
|
if ! cat $json|jq;then
|
|
exit
|
|
fi
|
|
n=`cat $json|jq length`
|
|
n=$((n - 2))
|
|
for ((i=0;i<=$n;i++))
|
|
do
|
|
command=`cat $json|jq -r ".[$i].command"`
|
|
time=`cat $json|jq -r ".[$i].time"`
|
|
zsh -c "$command"
|
|
sleep $time
|
|
done
|
|
;;
|
|
esac
|
|
```
|
|
|
|
例えば、このスクリプトを`command.zsh`で保存したとして、`ls`, `which cat`を一定の時間間隔で実行してみます。
|
|
|
|
```sh
|
|
$ mkdir -p ./tmp
|
|
$ cd ./tmp
|
|
$ chmod +x command.zsh
|
|
|
|
# まずは処理を保存します
|
|
# 時間間隔も保存しますので、`time enter`のところで任意のタイミングでetnerを押し、記録します
|
|
$ ./command.zsh s
|
|
[s]ave, [l]oad
|
|
command?, [s]top
|
|
ls
|
|
time enter
|
|
|
|
command?, [s]top
|
|
which cat
|
|
time enter
|
|
|
|
command?, [s]top
|
|
s
|
|
|
|
# 呼び出してみます
|
|
$ ./command.zsh l
|
|
[
|
|
{
|
|
"command": "ls",
|
|
"time": "5.63"
|
|
},
|
|
{
|
|
"command": "which cat",
|
|
"time": "7.08"
|
|
},
|
|
{
|
|
"command": "",
|
|
"time": ""
|
|
}
|
|
]
|
|
command.json command.zsh time.txt
|
|
/bin/cat
|
|
```
|
|
|
|
指定したコマンドが記録された間隔で実行されました。
|
|
|
|
もし永続化したいなら、`zsh repeat`を使うか、新しいオプションを付けてみてください。
|
|
|
|
```sh
|
|
ll)
|
|
if ! cat $json|jq;then
|
|
exit
|
|
fi
|
|
n=`cat $json|jq length`
|
|
n=$((n - 2))
|
|
while :
|
|
do
|
|
for ((i=0;i<=$n;i++))
|
|
do
|
|
command=`cat $json|jq -r ".[$i].command"`
|
|
time=`cat $json|jq -r ".[$i].time"`
|
|
zsh -c "$command"
|
|
sleep $time
|
|
done
|
|
done
|
|
;;
|
|
```
|
|
|
|
ちなみに、こういうのもあるらしいので、`gtime`に当ててやると、時間が測りやすいと思います。(面倒なのでやらないけど
|
|
|
|
https://raw.githubusercontent.com/coryfklein/sw/master/sw
|
|
|