我有一个 while 循环充当秒表,我想在脚本中实现它来计算命令运行所需的时间,我想在命令完成后杀死它
date1=`date +%s`; while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
done &
我需要终止脚本内的这个循环
我试过
1-jobs but it gives me no output
2-kill $! but give me erro
但循环继续运行
答案1
使用包timeout
中提供的命令coreutils
。
NAME
timeout - run a command with a time limit
SYNOPSIS
timeout [OPTION] DURATION COMMAND [ARG]...
timeout [OPTION]
DESCRIPTION
Start COMMAND, and kill it if still running after DURATION.
答案2
刚刚遇到了同样的问题,但背景不同!
让 while 循环成为一个函数,并在调用它后立即获取它的 PID,并用该变量杀死它!
function loopToKill() { # while loop inside a function
while true; do
echo -ne "$(date -u --date @$((`date +%s` - $date1)) +%H:%M:%S)\r";
sleep 1 # gotta have a sleep unless you want it to go crazy in the terminal
done
}
date1=`date +%s`
loopToKill & # run in background
loopPID=$! # get pid
# wait for whatever you needed
kill loopPID # here's where it get's cool
上面你可以在需要的时候杀死它,但这一切都是为了等待你需要的东西。这是适合我的情况的最佳解决方案,无论我的过程花费多长时间,我都会有一个旋转器。这是我自己的情况,但如果您需要在整个过程中保持计时器持续运行,那么这就是您所需要的。
另一个很酷的事情是使用输入来杀死它,这需要更多的挖掘,我目前正在研究它是为了好玩,但除了读到它们有风险之外,对 bash 中的用户输入不太了解。祝你好运,如果有帮助的话请给我点赞!