vscode-patch/patch-code.sh
2025-06-27 08:53:44 +08:00

82 lines
2.3 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
VSCODE_PATCH_DIR="$HOME/.vscode-patch"
VSCODE_APP_PATH=""
echo "[VSCode 应用程序补丁工具]"
# 1. 检查补丁工具文件夹
if [ ! -d "$VSCODE_PATCH_DIR/lib" ]; then
echo "错误:补丁文件夹应放在这儿:$HOME/.vscode-patch/"
echo "请先运行以下命令安装补丁工具:"
echo "git clone --depth 1 https://git.unvec.site/stevenhobs/vscode-patch ~/.vscode-patch"
echo "chmod -R +751 ~/.vscode-patch"
exit 1
fi
# 2. 获取VSCode安装路径
if [ -n "$1" ]; then
if [[ "$1" != /* ]]; then
VSCODE_APP_PATH="$(realpath "$1")"
else
VSCODE_APP_PATH="$1"
fi
else
read -p "指定VSCode App路径: " VSCODE_APP_PATH
fi
echo "-- VSCode安装路径$VSCODE_APP_PATH"
# 3. 验证路径有效性
if [ ! -f "$VSCODE_APP_PATH/code" ]; then
echo "错误指定路径下不存在VSCode可执行文件"
exit 1
fi
echo "-- 找到VSCode可执行文件$VSCODE_APP_PATH/code"
# 4. 检查是否已补丁过
if strings "$VSCODE_APP_PATH/code" | grep -q "$VSCODE_PATCH_DIR/lib" 2>/dev/null; then
echo "-- 程序已被补丁过,无需重复操作"
exit 0
fi
# 5. 备份原始文件
BACKUP_FILE="$VSCODE_APP_PATH/code.bak"
if [ ! -f "$BACKUP_FILE" ]; then
echo "-- 备份原始程序..."
cp "$VSCODE_APP_PATH/code" "$BACKUP_FILE"
if [ $? -ne 0 ]; then
echo "-- 错误:备份失败"
exit 1
fi
else
echo "-- 已存在备份文件:$BACKUP_FILE"
fi
# 6. 执行补丁
echo "-- 开始补丁..."
"$VSCODE_PATCH_DIR/tools/patchelf" \
--set-interpreter "$VSCODE_PATCH_DIR/lib/ld-linux-x86-64.so.2" \
--set-rpath "\$ORIGIN:$HOME/.vscode-patch/lib" \
"$VSCODE_APP_PATH/code"
# 7. 检查补丁结果
if [ $? -eq 0 ]; then
echo "-- 补丁成功!"
# 创建补丁说明文件
PATCH_INFO_FILE="$VSCODE_APP_PATH/Patch说明.md"
echo "VSCode App 已做旧版本兼容动态库补丁" > "$PATCH_INFO_FILE"
echo "补丁时间:$(date)" >> "$PATCH_INFO_FILE"
echo "原始文件备份code.bak" >> "$PATCH_INFO_FILE"
echo "补丁数据路径:$VSCODE_PATCH_DIR" >> "$PATCH_INFO_FILE"
echo "补丁操作:修改动态链接器和库路径" >> "$PATCH_INFO_FILE"
else
echo "-- 错误:补丁失败,恢复原始文件"
if [ -f "$BACKUP_FILE" ]; then
cp "$BACKUP_FILE" "$VSCODE_APP_PATH/code"
echo "-- 已恢复原始程序"
fi
exit 1
fi