Linux 与启动时运行的脚本不同的结果
在继续安装之前,我想检测计算机上是否安装了某些库,但无法使其正常工作 我有以下shell脚本:Linux 与启动时运行的脚本不同的结果,linux,install4j,Linux,Install4j,在继续安装之前,我想检测计算机上是否安装了某些库,但无法使其正常工作 我有以下shell脚本: #!/bin/bash verify_distro(){ CHECK_IF_PACKAGE=`dpkg -s ia32-libs` result=`echo $?` echo ${result} if [ ${result} == 0 ]; then echo "ia32-libs installed" return 0 else echo "not installed"
#!/bin/bash
verify_distro(){
CHECK_IF_PACKAGE=`dpkg -s ia32-libs`
result=`echo $?`
echo ${result}
if [ ${result} == 0 ]; then
echo "ia32-libs installed"
return 0
else
echo "not installed"
return 1
fi
}
verify_distro
如果我安装了ia32 LIB,并在控制台中手动运行它,然后执行echo$?
以查看输出,我将获得0退出代码,因为所有内容都已正确安装
我将此脚本设置为在安装的启动阶段运行,就在请求特权步骤之后,并将其设置为等待终止和输出流。为了让我能够停止安装程序,我还将失败策略设置为“作为用户是否重试或在失败时退出”
问题是,尽管安装了包,但脚本仍然失败,安装程序会询问是继续还是退出
我不知道如何解决这个问题,以便我可以停止安装程序,如果某些先决条件没有得到满足。或者有更好的方法来实现这一点吗?尝试消除无用的代码行检查其他脚本输出:
#!/bin/bash
verify_distro(){
dpkg -s ia32-libs > /dev/null
if [ $? == 0 ]; then
echo "ia32-libs installed"
return 0
else
echo "not installed"
return 1
fi
}
verify_distro
在启动时运行此脚本时,您没有确切说明错误是什么。可能是您的shell路径尚未初始化,在这种情况下,脚本将无法找到“dpkg”可执行文件。如果事实上这就是问题所在,那么指定dpkg的完整路径,例如“/usr/bin/dpkg-s ia32 libs”可以解决问题。将脚本文件添加到安装程序->自定义代码和资源,然后指定
${installer:sys.resourceDir}/scriptName.sh
用于“可执行”属性或“运行可执行文件或批处理文件”操作
这也将在“启动”节点中起作用。不幸的是,它也有同样的问题;尽管触发了库,我仍然得到了错误。那么,无论是手动运行还是从安装程序运行,返回值是否存在差异?您是否检查了.install4/installation.log中记录的返回值?此外,您还可以将“运行可执行文件”操作的输出重定向到日志文件,以检查脚本是否正确执行。@IngoKegel,问题源于脚本在复制到安装目录之前无法在启动阶段运行。例如,如果我在注册添加/删除项目阶段之后运行脚本(或在安装文件阶段之后的任何地方),它将正确运行。有没有办法在复制布局文件之前运行脚本?例如,我希望在启动安装程序时将其作为第一步运行,这样用户将立即收到缺少依赖项的警告,而不是在安装结束时。好的,明白了,请查看我的答案问题在于脚本没有执行。见我的评论。