符号链接到可执行文件无法启动应用程序,错误:<symlink>不存在</symlink>

时间:2014-08-09 16:45:13

标签: linux bash

我有一个可执行文件的符号链接,我创建如下:

$ ln -s /home/x/app/wps_office/wps

如果在命令行上输入:

$ /home/x/app/wps_office/wps

然后我的应用程序正确启动,但如果我尝试通过符号链接启动我的应用程序,那么我收到以下错误:

$ wps
wps does not exist!

只是为了确保符号链接是否正确;

$ readlink wps
/home/x/app/wps_office/wps

文件夹/ home / x / bin是我创建符号链接的地方,这个文件夹包含在我的$ PATH变量中。

我不知道这里出了什么问题,为什么我的应用程序在使用符号链接时没有执行?

快速更新;

我只是快速查看了符号链接所指向的文件的内容,看起来消息wps does not exist实际上来自应用程序,这意味着符号链接实际上是正确的。我不知道确切的原因,因为我觉得很奇怪,当我不使用符号链接时一切正常。我需要在代码中看起来更加彻底才能找到它。

符号链接指向的文件的代码:

#!/bin/bash

gOpt=
gTemplateExt=("wpt" "dot" "dotx")
gBinPath=$(dirname "$0")
if [ -d "${gBinPath}/office6" ]; then
    gInstallPath=${gBinPath}
else
    gInstallPath=/opt/kingsoft/wps-office
fi
gApp=wps

function parse_arg()
{
    if [ $# -eq 1 ] ; then
        ext="${1##*.}"
        if [ "" = "${ext}" ] ; then
            return 0
        fi

        for i in ${gTemplateExt}
        do
            if [ "${ext}" = "${i}" ] ; then
                gOpt=-t
            fi
        done
    fi
}

function run()
{
    oldPwd="${PWD}"
    if [ -e "${gInstallPath}/office6/${gApp}" ] ; then
        if [ -d /usr/lib32/gtk-2.0 ]; then
            export GTK_PATH=/usr/lib32/gtk-2.0
        fi
        ${gInstallPath}/office6/${gApp} ${gOpt} "$@" || ${gBinPath}/wps_error_check.sh ${gInstallPath}/office6/${gApp}
    else
        echo "${gApp} does not exist!"
    fi
}

function main()
{
    parse_arg "$@"
    run "$@"
}

main "$@"

请注意echo "${gApp} does not exist!"所在的行,这是我的错误来源。

3 个答案:

答案 0 :(得分:2)

如果命令只是shell的一部分,或者它们位于PATH环境变量中,则命令只会在没有任何路径元素的情况下执行。尝试     ./wps 在符号链接所在的目录中。同时确认权限是否正确。

答案 1 :(得分:1)

更改行

gInstallPath=/opt/kingsoft/wps-office

中的脚本

gInstallPath=/home/x/app/wps_office

答案 2 :(得分:0)

符号链接指向的文件,使当前目录启动另一个文件。这是实际启动的文件。只需为此文件创建符号链接即可解决此问题,这意味着符号链接到/home/x/app/wps_office/office6/wps

另一种选择是编辑源文件本身,如@Pixelchemist所述。然而,由于它涉及我已下载的应用程序以及将来可能会更新的应用程序,我认为在这种情况下不是首选选项。