터미널을 실행할 때마다 ".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
배쉬에는 없습니다. 진술은 if
으로 끝납니다 fi
. 또한 [ ]
테스트 구성을 사용할 때 [
정규식 일치 연산자에는 POSIX 대신 =~
bash의 특수 기호가 필요하며 일치를 무효화하려면 사용할 수 없는 전체 테스트( )를 무효화 해야 합니다. , 쉘 글로브 대신. 따라서 그 자체로는 의미가 없으며 "모든 문자"가 필요합니다. 그러면 변수를 설정하고 내보내는 형식은 , 이고, 와 사이에 가짜가 있습니다 . 그러니 이것을 시도해 보세요:[[ ]]
[ ]
[[ ! foo ~ bar ]]
!~
*
.*
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
. 필요한 것은 명령 입니다[[
. =
내보내기 값 설정 시 기호 누락(2회)- 당신의 테스트는
"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