1
0
hugo/content/blog/2021-01-19-shell.md

137 lines
2.8 KiB
Markdown
Raw Normal View History

2024-04-23 13:21:26 +00:00
+++
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