背景
因为在clash上加了自定义规则,所以需要设置自动更新脚本,防止覆盖,电脑为mac
代码
废话少说,上代码!要注意的点是你添加的规则要在rules的靠前的位置,否则很可能被覆盖。
#!/bin/bash
#chmod +x update_clash_custom.sh脚本使用方法
# === 用户自定义设置 ===
BASE_FILE="你的配置文件名.yaml"
FINAL_FILE="final_config.yaml"
MERGE_SCRIPT="append_custom_clash.py"
#进入工作目录,虽然我的sh脚本已经放在工作目录下了
cd "$WORKDIR" || exit 1
# 已有 base.yaml,直接使用,不行通过订阅url爬
if [ ! -f "$BASE_FILE" ]; then
echo "[!] 未找到 base.yaml,请手动放入 $WORKDIR 目录下"
exit 1
else
echo "[+] 找到本地 base.yaml,开始合并配置"
fi
# 写入合并脚本
cat > "$MERGE_SCRIPT" <<EOF
import yaml
# 加载原始配置
def load_yaml(file):
with open(file, 'r', encoding='utf-8') as f:
return yaml.safe_load(f)
# 保存修改后配置
def save_yaml(data, file):
with open(file, 'w', encoding='utf-8') as f:
yaml.dump(data, f, allow_unicode=True, sort_keys=False, default_flow_style=False)
config = load_yaml("$BASE_FILE")
# === 修改 DNS 部分 ===
dns_block = config.get("dns", {})
nameservers = dns_block.get("nameserver", [])
for ip in [“你的需要添加的dns”]:
if ip not in nameservers:
nameservers.insert(0, ip)
dns_block["nameserver"] = nameservers
config["dns"] = dns_block
# === 添加自定义规则 ===
custom_rules = [
“你的规则”
]
rules = config.get("rules", [])
for rule in custom_rules:
if rule not in rules:
rules.append(rule)
config["rules"] = rules
# 保存为最终配置
save_yaml(config, "final_config.yaml")
print("配置已处理完成)
EOF
# 执行合并脚本
python3 "$MERGE_SCRIPT"
echo "完成"