修复IOS越狱dpkg被中断错误

导入情景

今天你和往常一样,下载了一个插件

IMG_0006

下载,重启 SpringBoard,看上去一切正常,插件也正常工作

直到你打开了 Sileo

IMG_0007

What?什么情况?难道是刚刚装的插件有问题?

于是你想要卸载插件,但不幸的是

IMG_0010

并没有出现以往的重启 SpringBoard 按钮,而是一个完成按钮,点开显示详情你发现。

IMG_0011

它卸载出了问题。

而且在Sileo怎么卸载也卸载不掉了。

So sad 这是一个悲伤的故事。

但是不要慌张,肯定是有办法可以解决的。

解决之法:

这里我假设你安装了Openssh,并且你也知道root密码,你也明白如何使用SSH

当然如果你有些工具没有安装或者不熟悉,文末也有相应的说明。

打开电脑

ssh root@iPhone在局域网的ip

如何安装使用ssh?请跳转到Tips1

再次尝试卸载卸载它:

sh
iPhone:~ root# dpkg -r apt.cydiakk.gesturex
(Reading database ... 8237 files and directories currently installed.)
Removing apt.cydiakk.gesturex (1.0.4) ...
>>>>>>>>>>>>>正在读取系统版本<<<<<<<<<<<<<
>>>>>>您当前设备系统版本是:iOS 12.5.7<<<<<<<<<
__________________执行命令__________________
-e <div><style>span{color:#ADFF2F;}</style><span>===================================</span></div>
-e <div><style>span{color:#FA8072;}</style><span>=========Build by Cydiakk==========</span></div>
-e <div><style>span{color:#ADFF2F;}</style><span>==========Enjoy yourself===========</span></div>
-e <div><style>span{color:#7CFC00;}</style><span>===========感谢您的使用============</span></div>
-e <div><style>span{color:#FF00FF;}</style><span>===========插件卸载完成============</span></div>
-e <div><style>span{color:#ADFF2F;}</style><span>==========Cydiakk中文源™===========</span></div>
-e <div><style>span{color:#8A2BE2;}</style><span>======http://apt.cydiakk.com=======</span></div>
-e <div><style>span{color:#FFFF00;}</style><span>===================================</span></div>
-e <div><style>span{color:#EE9A00;}</style><span>Copyright 2018 Cydiakk中文源 © CYDIAKK®. </span></div>
___________________结束命令__________________
/Library/dpkg/info/apt.cydiakk.gesturex.postrm: 17: declare: not found
/Library/dpkg/info/apt.cydiakk.gesturex.postrm: 18: Syntax error: "(" unexpected
dpkg: error processing package apt.cydiakk.gesturex (--remove):
 installed apt.cydiakk.gesturex package post-removal script subprocess returned error exit status 2
Errors were encountered while processing:
 apt.cydiakk.gesturex

好的我们看到了/Library/dpkg/info/apt.cydiakk.gesturex.postrm这个东西

他是啥?让我们cat看看

sh
#!/bin/sh
echo ">>>>>>>>>>>>>正在读取系统版本<<<<<<<<<<<<<"
firmware=$(sw_vers -productVersion)
echo ">>>>>>您当前设备系统版本是:iOS $firmware<<<<<<<<<"
sleep  3
echo "__________________执行命令__________________"
echo -e "<div><style>span{color:#ADFF2F;}</style><span>===================================</span></div>"
echo -e "<div><style>span{color:#FA8072;}</style><span>=========Build by Cydiakk==========</span></div>"
echo -e "<div><style>span{color:#ADFF2F;}</style><span>==========Enjoy yourself===========</span></div>"
echo -e "<div><style>span{color:#7CFC00;}</style><span>===========感谢您的使用============</span></div>"
echo -e "<div><style>span{color:#FF00FF;}</style><span>===========插件卸载完成============</span></div>"
echo -e "<div><style>span{color:#ADFF2F;}</style><span>==========Cydiakk中文源™===========</span></div>"
echo -e "<div><style>span{color:#8A2BE2;}</style><span>======http://apt.cydiakk.com=======</span></div>"
echo -e "<div><style>span{color:#FFFF00;}</style><span>===================================</span></div>"
echo -e "<div><style>span{color:#EE9A00;}</style><span>Copyright 2018 Cydiakk中文源 © CYDIAKK®. </span></div>"
echo "___________________结束命令__________________"
declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
    eval "echo 'finish:restart' >&${cydia[0]}"
fi

哦吼吼!它本质是一个脚本。

定位出错点:

sh
/Library/dpkg/info/apt.cydiakk.gesturex.postrm: 17: declare: not found
/Library/dpkg/info/apt.cydiakk.gesturex.postrm: 18: Syntax error: "(" unexpected

declare: not found ?为什么?

因为 #!/bin/sh 使用的是 sh 解释器,而 declare 是 bash 的内置命令。因此在 sh 中不可用。

要如何修正它呢?将 #!/bin/sh 改为 #!/bin/bash就可以了啦~

如何修改编辑?请跳转到Tips2

接着回到 Sileo 中,按照以往卸载它的方式卸载就好。

问题解决啦 ~~~


Tips1:

安装 openssh:

打开 Sileo,搜索 openssh,安装第一个即可

IMG_0019

IP地址,点击已连接的wifi旁边的 i

PixPin_2024-06-04_00-06-55

此处便是IP地址

IMG_0021

Tips2:

如何编辑?

当然是安装vim安装啦

Sileo搜索vim

找到如下软件并安装

IMG_0018

请自行解决魔法问题。

如果有魔法,但下载到一定进度时超时,请多次尝试,总会安装成功的。

vi /Library/dpkg/info/apt.cydiakk.gesturex.postrm

输入 i 进入插入模式,修改完成后

按ESC退出插入模式,进入普通模式,再输入:wq保存并退出。

相关阅读:

脚本解释:

bash
#来自gpt4o的回复(有修改)

declare -a cydia
#声明一个数组变量 cydia。

cydia=($CYDIA)
#将环境变量 CYDIA 的内容拆分并赋值给数组 cydia。

if [[ ${CYDIA+@} ]]; then
    eval "echo 'finish:restart' >&${cydia[0]}"
fi
#检查 CYDIA 是否存在,如果存在,则执行 echo 'finish:restart' 并将输出重定向到 cydia 数组的第一个元素指向的文件描述符。

vim 菜鸟教程

vimhelp

vim tip wiki

linux远程登录 菜鸟教程

OpenSSH for Windows

openssh manual

当然,你也可以去 man page 里逛一逛