매우 간단한 스크립트에 이상한 문제가 있습니다. 라이브러리에 대해 LD_LIBRARY_PATH를 설정하고 있습니다. 터미널에 이 명령을 입력하면:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/some/path
echo $LD_LIBRARY_PATH
출력에는 echo
링커 경로가 올바르게 추가되었음을 보여줍니다. 하지만 정확히 동일한 명령을 .sh 파일에 넣으면 다음과 같습니다.
#!bin/bash
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/some/path
echo
실행 후 링커 경로가 추가되지 않은 것으로 출력에 표시됩니다. 스크립트는 실행 파일로 설정되고 올바른 디렉터리에서 실행됩니다. 누군가 무엇이 잘못되었는지 알려줄 수 있나요? 감사합니다!
답변1
하위 셸(스크립트)은 상위 셸에서 변수를 상속받을 수 있지만 그 반대는 불가능합니다.
즉, 사용 중인 셸의 변수를 해당 셸에서 실행 중인 스크립트로 전달할 수 있습니다. 그러나 스크립트에 설정된 변수는 스크립트를 실행하는 셸에는 아무런 영향을 미치지 않습니다.
그러나 스크립트의 변수는 스크립트에 대해 열린 셸에서만 설정됩니다. 예를 들어 "echo $LD_LIBRARY_PATH" 행을 스크립트에 추가하면 예상한 결과를 얻을 수 있습니다.
매번 작동하는 셸에 대한 변수를 설정하려면 해당 변수를 .bashrc 파일(또는 OSX의 경우 .bash_profile)에 넣으세요.