每次运行终端时,我都会收到此错误消息“.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
endif
bash 里没有。语句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_PATH
会1
?我真的不明白这将如何执行。如果您想要做的只是添加(/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