.bashrc 语法错误:意外的文件结尾

.bashrc 语法错误:意外的文件结尾

每次运行终端时,我都会收到此错误消息“.bashrc 语法错误:意外的文件结尾”

所以我开始评论它的一部分来了解这个问题,我猜它是在下面的 if 条件中。我想知道如何编辑它才能工作?

if ("1" == "$?LD_LIBRARY_PATH") then
        if ("$LD_LIBRARY_PATH" !~ */usr/local/iscir/lib*) then
                export LD_LIBRARY_PATH /usr/local/iscir/lib:$LD_LIBRARY_PATH
        endif
else
        export LD_LIBRARY_PATH /usr/local/iscir/lib
endif

我尝试过这个,但没有成功

if ["1" == "$?LD_LIBRARY_PATH"]; then
        if ["$LD_LIBRARY_PATH" !~ */usr/local/iscir/lib*]; then
                export LD_LIBRARY_PATH /usr/local/iscir/lib:$LD_LIBRARY_PATH
        fi
else
        export LD_LIBRARY_PATH /usr/local/iscir/lib
fi

答案1

endifbash 里没有。语句if以 结束fi。此外,在使用[ ]测试结构时,您需要在[.正则表达式匹配运算=~符需要 bash 的特殊符号[[ ]]而不是 POSIX [ ],并且要否定匹配,您否定整个测试 ( [[ ! foo ~ bar ]]) ,您不能使用!~.此外,它需要正则表达式,而不是 shell glob。所以*它本身没有任何意义,你需要.*“任何角色”。然后,设置和导出变量的格式是,而且,在和之间export foo=bar有一个杂散。所以试试这个:?$LD_LIBRARY_PATH

if [ "1" == "$LD_LIBRARY_PATH" ]; then
    if [[ ! "$LD_LIBRARY_PATH" =~ .*/usr/local/iscir/lib.* ]]; then
        export LD_LIBRARY_PATH="/usr/local/iscir/lib:$LD_LIBRARY_PATH"
    fi
else
    export LD_LIBRARY_PATH="/usr/local/iscir/lib"
fi

这应该可行,但整件事没有意义。什么时候LD_LIBRARY_PATH1?我真的不明白这将如何执行。如果您想要做的只是添加(/usr/local/iscir/lib如果LD_LIBRARY_PATH尚不存在的话),您只需要这样做:

if [ -z "$LD_LIBRARY_PATH" ]; then
    export LD_LIBRARY_PATH="/usr/local/iscir/lib"
elif [[ ! "$LD_LIBRARY_PATH" == */usr/local/iscir/lib* ]]; then
    export LD_LIBRARY_PATH="/usr/local/iscir/lib:$LD_LIBRARY_PATH"
fi

答案2

如果你想编辑它:

  • 与所有其他命令一样,该命令[两侧都需要空格
  • 比较运算符=~不是 的一部分test。你需要的是命令[[
  • =设置导出值时缺少符号(两次)
  • 你的测试"1" == "$?LD_LIBRARY_PATH"永远是错误的

如果您只想扩展路径(如果路径尚未包含扩展),则可以使用以下命令:

case "$LD_LIBRARY_PATH" in
    */usr/local/iscir/lib*);;
    *)
        export LD_LIBRARY_PATH=/usr/local/iscir/lib:"$LD_LIBRARY_PATH"
        ;;
esac

相关内容