2021-01-19 /
@syui
mac
, shell
/ mac
macでtimeコマンドを使ってみる
coreutils
になかったのですが、gnu-time
でインストールできます。
mac標準は、/usr/bin/time
にありますが、ほとんどのオプションが機能せず、あまり使えません。
$ brew install gnu-time
$ gtime -f "%e" read
これによって、ストップウォッチとして使えますし、任意のタイミングで実行時間を計測して記録できるので、色々と便利です。
例えば、任意のコマンドを指定した間隔で実行してみます。
#/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
を一定の時間間隔で実行してみます。
$ 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
を使うか、新しいオプションを付けてみてください。
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