82 lines
2.3 KiB
Bash
82 lines
2.3 KiB
Bash
#!/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
|