# Summary
# Cues
# Notes
## Dry-run 模式的作用 🎯
Dry-run(演练/模拟运行)模式超级有用!它让你可以**预览脚本会做什么,但不真正执行**。
### 具体场景举例
想象你要同步代码到服务器,但担心:
- "我会不会不小心覆盖服务器上的重要文件?"
- "这次同步会传输多少文件?"
- "我的 exclude 规则写对了吗?"
### 使用对比
**没有 dry-run:**
```bash
# 直接执行,文件已经传过去了
$ bash sync.sh
Syncing code...
transferring 500 files... # 哦豁,怎么这么多?!
# 完蛋,已经覆盖了... 😱
```
**有 dry-run:**
```bash
# 先模拟看看
$ bash sync.sh --dry-run
DRY RUN MODE
Would sync:
- src/model.py
- configs/new_config.yaml
- DELETE: old_experiments/ # 等等,这个不应该删除!
# 发现问题,修改脚本后再真正执行
$ bash sync.sh # 这次放心了
```
### 完整示例实现
```bash
#!/bin/bash
# 解析参数
DRY_RUN=false
if [[ "$1" == "--dry-run" || "$1" == "-n" ]]; then
DRY_RUN=true
echo -e "${YELLOW}🔍 DRY RUN MODE - 仅显示将要执行的操作${NC}"
fi
# rsync 命令
if $DRY_RUN; then
# 模拟模式:加 --dry-run 参数
rsync -avz --dry-run \
--exclude='*.pyc' \
$LOCAL_DIR/ $REMOTE_HOST:$REMOTE_DIR/
# SSH 命令只显示不执行
echo "Would execute: ssh $REMOTE_HOST 'mkdir -p $REMOTE_DIR'"
echo "Would execute: pip install -r requirements.txt"
else
# 真正执行
rsync -avz \
--exclude='*.pyc' \
$LOCAL_DIR/ $REMOTE_HOST:$REMOTE_DIR/
ssh $REMOTE_HOST "mkdir -p $REMOTE_DIR"
fi
```
### 实际好处
1. **安全检查** - 在生产环境操作前先验证
2. **调试脚本** - 看看脚本逻辑是否正确
3. **估算时间** - 了解要传输多少数据
4. **验证规则** - 确认 exclude/include 规则是否正确
5. **团队协作** - 让同事先 review 将要执行的操作
### 使用场景
```bash
# 常见用法
./deploy.sh --dry-run # 先看看会部署什么
./backup.sh -n # 检查会备份哪些文件
./cleanup.sh --dry-run # 确认不会误删重要文件
```
**小贴士:**
- 很多命令行工具都支持 dry-run(如 `rsync`、`make`、`terraform`)
- 这是 DevOps 最佳实践之一
- 特别是在处理生产环境时,dry-run 可以避免很多事故!
所以这个功能虽然只有几行代码,但能避免很多"手滑"导致的悲剧 😅