Bash 명령은 스크립트에서 실행되지 않지만 터미널에 입력하면 작동합니다.

Bash 명령은 스크립트에서 실행되지 않지만 터미널에 입력하면 작동합니다.

매우 간단한 스크립트에 이상한 문제가 있습니다. 라이브러리에 대해 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)에 넣으세요.

관련 정보