환경이나 세션에 변수를 올바르게 추가하는 방법

환경이나 세션에 변수를 올바르게 추가하는 방법

나는 로컬로 구축된 오픈 소스 소프트웨어를 사용합니다. 빌드 후 매뉴얼에는 다음과 같이 빌드 디렉토리에서 실행하라고 나와 있습니다.

$ LD_LIBRARY_PATH=../applicationExeFile

그러면 응용프로그램이 정상적으로 실행됩니다.

이제 너무 많이 입력하지 않고 빠르게 호출할 수 있는 간단한 쉘(run.sh)을 만들어 보려고 합니다. 내용은 다음과 같습니다.

#!/bin/bash

export -n LD_LIBRARY_PATH=.
./applicationExeFile

그러나 동일한 폴더에서 라이브러리를 찾을 수 없는 응용 프로그램 실행 파일에 대한 오류가 발생하므로 LD_LIBRARY_PATH가 셸에 등록되지 않은 것 같습니다.

./applicationExeFile: error while loading shared libraries: libchart.so: cannot open shared object file: No such file or directory

내가 무엇을 잘못하고 있으며 어떻게 이를 달성할 수 있습니까?

답변1

-n첫 번째 질문은 사실연합 국가변수를 내보내지만 내보내지는 않습니다. 바라보다 help export:

export: export [-fn] [name[=value] ...] or export -p
    Set export attribute for shell variables.
    
    Marks each NAME for automatic export to the environment of subsequently
    executed commands.  If VALUE is supplied, assign VALUE before exporting.
    
    Options:
      -f    refer to shell functions
      -n    remove the export property from each NAME
      -p    display a list of all exported variables and functions
    
    An argument of `--' disables further option processing.
    
    Exit Status:
    Returns success unless an invalid option is given or NAME is invalid.

다음은 .프로세스의 현재 작업 디렉터리를 참조합니다. 이는 스크립트가 여전히 설치 프로그램의 특정 디렉터리에서 실행되어야 한다는 것을 의미하는데, 이는 약간 무의미해 보입니다. 그냥 전체 경로를 사용하세요. 프로그램이 있는 경우 /home/dekker/myprogram스크립트를 다음과 같이 만드세요.

#!/bin/bash
export LD_LIBRARY_PATH=/home/dekker/myprogram
/home/dekker/myprogram/applicationExeFile

그렇지 않으면:

#! /bin/sh -
LD_LIBRARY_PATH=/home/dekker/myprogram exec /home/dekker/myprogram/applicationExeFile

구체적인 내용이 없고 bash별도의 진술이 필요하지 않기 때문입니다 export. 또한 사용하면 exec프로세스가 절약되고 신호 처리 및 종료 상태 보고가 더욱 안정적으로 이루어집니다.

관련 정보