Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xcode/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 与启动时运行的脚本不同的结果_Linux_Install4j - Fatal编程技术网

Linux 与启动时运行的脚本不同的结果

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"

在继续安装之前,我想检测计算机上是否安装了某些库,但无法使其正常工作

我有以下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"
    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,问题源于脚本在复制到安装目录之前无法在启动阶段运行。例如,如果我在注册添加/删除项目阶段之后运行脚本(或在安装文件阶段之后的任何地方),它将正确运行。有没有办法在复制布局文件之前运行脚本?例如,我希望在启动安装程序时将其作为第一步运行,这样用户将立即收到缺少依赖项的警告,而不是在安装结束时。好的,明白了,请查看我的答案问题在于脚本没有执行。见我的评论。