所以我尝试在我的 raspberry pi 上安装 dokuwiki 包,但是包安装失败。尝试删除包时,dpkg 也失败并出现以下错误:
String found where operator expected at /usr/share/perl5/Debconf/Element/Noninteractive/Multiselect.pm line 2, at end of line
(Missing semicolon on previous line?)
Can't locate object method "new" via package "Debconf::Element::Noninteractive::Multiselect" (perhaps you forgot to load "Debconf::Element::Noninteractive::Multiselect"?) at /usr/share/perl5/Debconf/FrontEnd.pm line 68, <GEN50> line 5.
(Reading database ... 132035 files and directories currently installed.)
Removing dokuwiki (0.0.20140505.a+dfsg-4) ...
dpkg: error processing package dokuwiki (--remove):
subprocess installed post-removal script returned error exit status 10
Errors were encountered while processing:
dokuwiki
E: Sub-process /usr/bin/dpkg returned an error code (1)
我认为“Multiselect.pm”文件可能有错误,所以我看了一下,发现了一些非常奇怪的事情:
#!odsrisin= eris-wet Tems tsleTaasamreS(ocdeseth d.gnonsed"p!
Lipa")ag De on :Eifmeod::isnileerthti 0::{
lt el t; se trort;trseg asthqw.gebChnfdVElueenod:Nisin0]ra
iv ;
1
我明白为什么 dpkg 执行此文件时会遇到麻烦。甚至第一行告诉应该使用哪个程序来运行此文件的内容都是乱码。我猜这个文件要么以某种方式被混淆了,要么使用了 UTF-* 编码以外的其他编码。我猜它也可能已损坏。
有人对此有什么想法吗?也许我该如何删除这个破损的包装?
答案1
我搞明白了。我不确定原始文件发生了什么,但我只是用另一个 Debian 系统上运行的文件替换了它。然而,这仍然不允许我删除 dokuwiki 包。
我想看看 dokuwiki 的配置脚本/var/lib/dpkg/信息/然后我找到了出错的脚本:dokuwiki.postinst。运行该脚本时不带任何参数会引发有关无效运算符的错误,因此我将以下代码片段添加到文件开头:
if [ -z $1 ]; then
./dokuwiki.postinst a
return
fi
它只是检查脚本是否使用任何参数调用,如果没有,它会使用无意义的参数(仅“a”)调用自身,然后返回。
之后我就跑了
dpkg -r dokuwiki
并且它顺利卸载。