如何防止终端中的服务器初始化命令被连续执行两次?
避免开发服务器初始化脚本连续执行的几种方案
1. 给初始化脚本添加执行间隔检查
在脚本开头加入时间校验逻辑,记录上次执行的时间戳,若两次执行间隔小于设定阈值(比如5分钟),则自动退出,避免误触重复执行。
示例bash脚本代码:
#!/bin/bash # 存储上次执行时间的文件路径 LAST_RUN_FILE="$HOME/.dev_server_init_timestamp" # 设置最小执行间隔(单位:秒,这里设为5分钟=300秒) MIN_INTERVAL=300 # 检查是否存在上次执行记录 if [ -f "$LAST_RUN_FILE" ]; then LAST_EXEC_TIME=$(cat "$LAST_RUN_FILE") CURRENT_TIME=$(date +%s) TIME_DIFF=$((CURRENT_TIME - LAST_EXEC_TIME)) if [ "$TIME_DIFF" -lt "$MIN_INTERVAL" ]; then echo "⚠️ 初始化脚本${MIN_INTERVAL}秒内已执行过,本次执行取消。" exit 1 fi fi # 更新本次执行时间到记录文件 date +%s > "$LAST_RUN_FILE" # 下面放你原来的初始化脚本逻辑...
2. 增加交互式确认步骤
在脚本开头加入确认提示,误触后直接回车就能取消执行,不用手动按Ctrl-C终止流程。
示例代码:
#!/bin/bash read -p "确认要启动开发服务器初始化流程吗?(y/N) " USER_CONFIRM # 只有输入y/Y才继续执行 if [[ "$USER_CONFIRM" != "y" && "$USER_CONFIRM" != "Y" ]]; then echo "已取消执行。" exit 0 fi # 原来的初始化脚本内容...
3. 优化Shell历史搜索逻辑
配置Shell的历史搜索规则,让上下箭头只匹配当前输入前缀的命令。比如你平时输入推送命令的前缀(如push)再按上箭头,只会调出推送相关的历史记录,不会误触到初始化命令。
针对Zsh的配置:
在~/.zshrc中添加以下内容:
# 绑定上下箭头为前缀匹配历史搜索 bindkey '^[[A' history-search-backward bindkey '^[[B' history-search-forward
保存后执行source ~/.zshrc生效。
针对Bash的配置:
在~/.bashrc中添加:
# 启用前缀匹配历史搜索 bind '"\e[A": history-search-backward' bind '"\e[B": history-search-forward'
保存后执行source ~/.bashrc生效。
4. 区分命令别名的长度
把初始化脚本的别名设为较长、辨识度高的名称(比如init-dev-server),而推送代码的别名用短名称(比如push-dev)。这样你按上箭头时,常用的短别名命令会更容易被调出,减少误触到刚执行的长初始化命令的概率。
内容的提问来源于stack exchange,提问作者Chuck
相关产品推荐
相关产品推荐

