나는 로컬로 구축된 오픈 소스 소프트웨어를 사용합니다. 빌드 후 매뉴얼에는 다음과 같이 빌드 디렉토리에서 실행하라고 나와 있습니다.
$ 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
프로세스가 절약되고 신호 처리 및 종료 상태 보고가 더욱 안정적으로 이루어집니다.