스크립트에서 LD_CONFIG_PATH를 수정할 수 없습니다.

스크립트에서 LD_CONFIG_PATH를 수정할 수 없습니다.

blabla.so" 찾을 수 없음" 상황을 피하기 위해 LD_CONFIG_PATH에 일부 경로를 추가하는 스크립트를 작성하려고 합니다 . 문제는 내 스크립트가 (내보내기를 통해) 자체 컨텍스트를 수정할 수 있지만 다른 쉘에는 영향을 미치지 않는다는 것입니다. 재부팅과 셸 간에 지속되도록 전역적으로 변수를 설정하고 싶습니다.

내 현재 스크립트는 다음과 같습니다.

LDPATH='/opt/mqm/lib64'
LD_LIBRARY_PATH="$LDPATH:$LD_LIBRARY_PATH"
ldconfig

나는 다음과 같이 달린다

sudo ./set_my_ld_path.sh
$LD_LIBRARY_PATH 

아무것도 반환하지 않습니다( LD_LIBRARY_PATH비어 있음).

나도 시도했다

LDPATH='/opt/mqm/lib64' env
LD_LIBRARY_PATH="$LDPATH:$LD_LIBRARY_PATH"
ldconfig

하지만 PATH/LANG/HOME/LC_TIME/...과 같은 모든 기존 변수만 작성합니다.

예를 들어, powershell에서 다음 스크립트를 실행하면 원하는 작업이 수행됩니다.

# setting an environment variable for current and descendant processes, same as bash `export`
$env:OPENCV_DIR = $OPENCV_DIR

# applying it machine-wide, persists between users/shells/reboots
[Environment]::SetEnvironmentVariable("OPENCV_DIR", $env:OPENCV_DIR, [EnvironmentVariableTarget]::Machine)

그게 어떻게 가능하지?

답변1

첫째, 할당문 주위에는 공백이 있어서는 안 됩니다 =.

둘째, 하위 프로세스(스크립트)에서는 현재 환경에 영향을 미칠 수 없습니다.

환경 변수를 설정하는 스크립트를 실행하고 변경 사항이 현재 환경에 영향을 미치도록 하려면 .(점) 또는 sourcein을 사용하여 스크립트를 가져와야 합니다 bash.

sudo또한 스크립트를 통해 스크립트를 얻지 못할 수도 있습니다 sudo(이 경우 이를 사용하는 이유는 확실하지 않습니다).

이는 다음과 같은 스크립트 파일을 가질 수 있음을 의미합니다.

LD_LIBRARY_PATH="/opt/mqm/lib64:$LD_LIBRARY_PATH"

그런 다음 다음 방법 중 하나를 사용하여 얻을 수 있습니다.

. ./file

또는

source ./file

대화형 셸의 셸 시작 파일에서 변수( ~/.bashrc사용된 경우 )를 설정하고 내보내고 bash이를 "전역적으로"(셸에서 시작된 모든 프로세스에 대해) 설정합니다.

관련 정보