Deb postinst 想兼容cydia方式安装和dpkg直接安装

在本站搜过几个帖子,都是推荐如下方式:

#!/bin/sh

declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
  eval "echo 'finish:restart' >&${cydia[0]}"
fi

而我的目的是想实现:dpkg -i方式安装,能自动uicache和respring,cydia源方式安装,先uicache,再提示重启springboard,现在我是这样写的:

#!/bin/sh

declare -a cydia
cydia=($CYDIA)
if [[ ${CYDIA+@} ]]; then
  uicache
  eval "echo 'finish:restart' >&${cydia[0]}"
else
  sleep 2
  killall -9 SpringBoard
  uicache
fi

可是dpkg -i直接提示

/var/lib/dpkg/info/com.your.deb.postinst: line 5: syntax error near ;' /var/lib/dpkg/info/com.your.deb.postinst: line 5: if [[ ]]; then’

请问大佬们,我该怎么处理呢,谢谢!

我对deb postinst 不是非常熟悉,但是根据你的 “dpkg -I” 提示看起来
从上面数到第5行, 看起来就是错误的地方,那么建议你改改 ${CYDIA+@}

感谢回复。我参考过iphonedev上面,改成这样:

#!/bin/sh

declare -a cydia
cydia=($CYDIA)
if [[ -z $CYDIA ]]; then
  sleep 2
  killall -9 SpringBoard
  uicache
else
  uicache
  eval "echo 'finish:restart' >&${cydia[0]}"
fi

然而在Cydia上安装依然走的killall -9 SpringBoard那个分支。

你可以找一个正常工作的插件参考它postinst是怎么写的

谢谢你的回复,我也这样操作过,我本机有一个libactivator是tweak和app混合的。我看了看:

libactivator.postinst长这样:

#!/bin/sh
mkdir -p /var/mobile/Library/Caches
chmod 777 /var/mobile/Library/Caches
chown mobile /var/mobile/Library/Caches
touch /var/mobile/Library/Caches/libactivator.plist
chmod 666 /var/mobile/Library/Caches/libactivator.plist
chown mobile /var/mobile/Library/Caches/libactivator.plist
rm -f /Library/MobileSubstrate/DynamicLibraries/Activator.disabled
( launchctl stop com.apple.mobilegestalt.xpc 2> /dev/null && launchctl start com.apple.mobilegestalt.xpc ) || true
( launchctl stop com.apple.wcd 2> /dev/null && launchctl start com.apple.wcd 2> /dev/null ) || true
exec activator postinst

可以看到,它最后是走自己的可执行文件的,也就是说,如何区分是cydia安装还是dpkg安装的部分,还是没有暴露出来。

不过我玩的tweak不多,还有啥别的软件也是app和tweak混合的,不太了解,就没去继续深挖了。

你再多找几个啊。。。