bash - 谁能解释这个简单的 bash 脚本出了什么问题?
问题描述
下面我有一个简单的 bash 脚本,我基本上想运行 X 秒,然后自行重启。我遇到的问题,老实说有点困惑的是我在脚本中定义 $SECONDS 并且从不重新定义或操纵值。然而,如果您使用 -x 运行脚本,您可以看到 $SECONDS 与 $loopcounter 一起递增。哇?!?
#!/bin/bash -x
SECONDS=30
loopcounter=0
LOGFILE="/var/log/somelogfile"
while [ /bin/true ]
do
eval "tail -f $LOGFILE | grep -i error &"
while [ $loopcounter -lt $SECONDS ]
do
loopcounter=$(($loopcounter + 1))
sleep 1
done
echo "Restarting.."
pkill -f "tail -f $LOGFILE"
done
解决方案
SECONDS
是一个特殊的变量。见man bash
:
每次引用此参数时,都会返回自 shell 调用以来的秒数。如果为 SECONDS 分配了一个值,则后续引用时返回的值是自分配以来的秒数加上分配的值。如果 SECONDS 未设置,即使随后被重置,它也会失去其特殊属性。
如果您不想与特殊变量名发生冲突,请不要使用大写变量名。
推荐阅读
- apache-camel - 当肥皂故障时,Camel cxf 导致 I/O 调度程序线程 100% CPU
- html - WordPress Bootstrap5 Navbar 未与其他 col div 对齐
- mysql - MySQL 在添加新的复合索引时是否会在表上获得锁?
- c# - 如何在elasticsearch中将字段类型从字符串更新为字符串数组?
- c# - ASP.NET CORE / 添加 .AddSignInManager 时遇到的问题
>(); 在启动类 - html - 在 jquery 中上传多个文件的问题
- python - 在 python 中使用 ggplot 函数 geom_area 时出错
- testing - 选择器无法访问 Vuetify 的 v-data-table 的“行”
- php - PHP中的日期时间转换格式
- r - 在ggplot2中设置线条的颜色