我给了我一个小秒表,我把它放入bashrc中,代码如下:
stopwatch() {
date1=`date +%s`
echo $1
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r"
done
}
输出看起来像这样,而时间只会在第二行计算:
~$ stopwatch test
test
00:00:04
现在,如果我要结束秒表,请按Ctrl + C,这样就可以了:
~$ stopwatch test
test
^C:00:03
我希望在使用例如输出包含其输出时结束循环。我的回车键或任何其他。 但是,如果我使用read,它会等待我的输入并保持计时器。
如果我按任何仍然保留输出的键,我如何保持循环运行?
编辑:我在这里.. 是否可以在退出之前将最后一个输出写入文件?
答案 0 :(得分:3)
添加到123的回答,因为我无法发表评论。 而不是使用
kill %1
使用
kill $!
因为,shell上可能还有其他几个工作,kill%1也可以杀掉其他工作,所以要让它更灵活$!可以使用。
$!将返回当前shell上运行的最后一个函数的进程ID。
使用&
在后台运行循环然后暂停阅读功能。
按下回车时写入并终止。
stopwatch() {
date1=`date +%s`
echo $1
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r"
done &
read
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)" > file
kill $!
}