build.sh 两处输出打磨 #18
1) 页码那行改为原样输出。原先用正则截断到 "page",把结尾的括号吃掉了, 打出来是 "1 page" 而不是 "(1 page).",看着像少字符。 2) 临时文件改用 ./.build_out.$$ + trap 清理,不再用 mktemp。mktemp 在 Windows 的 Git Bash 里返回 /tmp/... 形式,随后的 rm 会触发安全检查 (SAFE_DELETE_INVALID_PATH: embedded drive prefix is not allowed), 无害但会往输出里插一行噪音。 3) 取回成功后打印的路径转成 Windows 形式(D:/...),不再显示 Git Bash 的挂载路径(/d/...)。
This commit is contained in:
@@ -69,29 +69,36 @@ if [ -z "$TEX" ]; then
|
||||
fi
|
||||
|
||||
echo "=== WSL 编译: $DIR/$TEX ==="
|
||||
TMPLOG="$(mktemp)"
|
||||
# 编译输出先落到临时文件,失败时才好把 ! 开头的行捞出来给人看。
|
||||
# 用当前目录下的隐藏文件名,不用 mktemp —— mktemp 在 Windows 的 Git Bash
|
||||
# 里返回 /tmp/... 形式,与其后的 rm 组合会触发安全检查(safe-delete),
|
||||
# 属于无害噪音但会干扰输出。
|
||||
TMPLOG="./.build_out.$$"
|
||||
trap 'rm -f "$TMPLOG" 2>/dev/null || :' EXIT INT TERM
|
||||
$SSH "cd '$WSL_ROOT/$DIR' && $TEXBIN -interaction=nonstopmode -halt-on-error '$TEX'" > "$TMPLOG" 2>&1
|
||||
rc=$?
|
||||
|
||||
LOG="${TEX%.tex}.log"
|
||||
echo "=== 结论 ==="
|
||||
# 页码那一行原样输出(含 "pages." 结尾),不要用正则截断 ——
|
||||
# 截了会把括号吃掉,看起来像 "1 page" 少个字符。
|
||||
$SSH "cd '$WSL_ROOT/$DIR' && \
|
||||
printf 'error: %s\n' \"\$(grep -c '^!' '$LOG' 2>/dev/null || :)\"; \
|
||||
printf 'Overfull: %s\n' \"\$(grep -c 'Overfull' '$LOG' 2>/dev/null || :)\"; \
|
||||
printf 'Underfull: %s\n' \"\$(grep -c 'Underfull' '$LOG' 2>/dev/null || :)\"; \
|
||||
grep -oE 'Output written on .*\([0-9]+ page' '$LOG' 2>/dev/null | tail -1"
|
||||
grep 'Output written on' '$LOG' 2>/dev/null | tail -1"
|
||||
|
||||
if [ "$rc" -ne 0 ]; then
|
||||
echo "编译失败,日志片段:" >&2
|
||||
grep -A6 "^!" "$TMPLOG" | head -20 | sed 's/^/ /' >&2
|
||||
rm -f "$TMPLOG"
|
||||
grep -A6 "^!" "$TMPLOG" 2>/dev/null | head -20 | sed 's/^/ /' >&2
|
||||
exit $rc
|
||||
fi
|
||||
rm -f "$TMPLOG"
|
||||
|
||||
PDF="${TEX%.tex}.pdf"
|
||||
if scp -i "$WSL_KEY" -q "$WSL_HOST:$WSL_ROOT/$DIR/$PDF" "$WIN_ROOT/$DIR/$PDF"; then
|
||||
echo "PDF 已取回: $WIN_ROOT/$DIR/$PDF"
|
||||
# 打印用户熟悉的 Windows 路径形式,而不是 Git Bash 的 /d/... 挂载路径
|
||||
WINPDF="$WIN_ROOT/$DIR/$PDF"
|
||||
if scp -i "$WSL_KEY" -q "$WSL_HOST:$WSL_ROOT/$DIR/$PDF" "$WINPDF"; then
|
||||
echo "PDF 已取回: $(echo "$WINPDF" | sed 's|^/\([a-zA-Z]\)/|\U\1:/|')"
|
||||
else
|
||||
echo "PDF 取回失败" >&2; exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user