# -*- coding: utf-8 -*- """修 shell 脚本的 CRLF 行尾。 Windows 上 Python 的 Path.write_text() 默认会把 \n 转成 \r\n。 shell 脚本带 \r 会直接报「未预期的记号 $'\\r'」,完全没法执行。 之前我用文本模式改过 relay/install.sh,所以它现在带 CRLF 了 —— 而这个文件是要交付给用户在 Linux 上跑的。 修法:所有 .sh 一律写成 LF。 """ from __future__ import annotations import sys from pathlib import Path ROOT = Path(r"C:\Users\shu\Desktop\deepseekagent\LanRemote") TARGETS = [ ROOT / "relay" / "install.sh", ROOT / "relay" / "tunnel-run.sh", ] # 顺便把 _build 里的辅助脚本也统一(不交付,但保持一致省得再踩) for extra in sorted((ROOT / "_build").glob("*.sh")): if extra not in TARGETS: TARGETS.append(extra) def main() -> int: fixed = 0 for path in TARGETS: if not path.is_file(): continue raw = path.read_bytes() if b"\r\n" in raw: count = raw.count(b"\r\n") path.write_bytes(raw.replace(b"\r\n", b"\n")) print(f" {path.name}: 修了 {count} 处 CRLF -> LF") fixed += 1 else: print(f" {path.name}: 已经是 LF") print() print(f" 共修 {fixed} 个文件") # 复核:确认没有残留 \r bad = [] for path in TARGETS: if path.is_file() and b"\r" in path.read_bytes(): bad.append(path.name) if bad: print(f" [失败] 还有残留: {bad}") return 1 print(" 所有 .sh 都是纯 LF 了") return 0 if __name__ == "__main__": sys.exit(main())