모든 경로 유사 변수에 루트 폴더를 추가하는 기능이 있습니까? 현재 나는 이 기능을 사용합니다:
function prepend_paths() {
ROOT_PATH=$(readlink -f $1)
export PATH=$ROOT_PATH/bin:$PATH
export LD_LIBARY_PATH=$ROOT_PATH/lib:$LD_LIBARY_PATH
export LD_LIBARY_PATH=$ROOT_PATH/lib64:$LD_LIBARY_PATH
export C_INCLUDE_PATH=$ROOT_PATH/include:$C_INCLUDE_PATH
export CPLUS_INCLUDE_PATH=$ROOT_PATH/include:$CPLUS_INCLUDE_PATH
export PYTHONPATH=$ROOT_PATH/lib/python3.5/site-packages:$PYTHONPATH
export MANPATH=$ROOT_PATH/share/man:$MANPATH
}
하지만 그것이 완전한 것인지는 모르겠습니다.
가끔 이 기능을 좋아하는 사람이 나뿐만이 아니기 때문에 이 기능을 수행할 수 있는 기존 방법이 있어야 한다고 생각했습니다. 하지만 지금까지 나는 아무것도 찾지 못했습니다.
답변1
이는 export
할당과 동일하지 않습니다. 다음을 수행하려는 것 같습니다.
function prepend_paths() {
for P in $(env | grep PATH | sed 's/=.*//') ; do
eval $P=${1}:\$$P ;
done
}
즉, 이름에 "PATH"가 포함된 모든 환경 변수에 지정된 접두사를 추가합니다. 포함된 $(env ..)
하위 명령은 변수 이름 목록을 제공합니다. for 루프 본문의 작업 라인은 call 을 통해 할당을 수행합니다 eval
. 이는 이중 계산을 편리하게 수행합니다 P
(먼저 변수 이름으로, 그 다음에는 해당 변수의 값으로).
그런 다음 이러한 할당은 "이 쉘"에 저장되고 "내보내기됨"으로 표시된 모든 변수는 하위 프로세스로 전파됩니다. 물론 export $P
원하는 경우 명시적인 설명을 추가할 수 있으며, 그것이 좋다고 생각되면 출력을 인쇄하여 작업을 보고할 수도 있습니다.
답변2
"이것이 철저한가?"라는 질문이 흥미롭습니다. PATH
유사한 변수 목록 이 어떻게 완전할 수 있습니까? 위에서 언급 했듯이 PATH
대부분의 쉘은 이를 존중합니다. LD_LIBARY_PATH
대부분의 프로그램에서도 인식됩니다 . PYTHONPATH
Python 실행 파일은 실제로 존중됩니다. 그런데 내일 어떤 프로그램을 설치할지 모르니 PATH
이전에 어떤 유사한 변수를 설정할지 어떻게 알 수 있을까요?
나는 Java를 생각 CLASSPATH
했고 . 하지만 가상의 프로그램을 만들어 봅시다 . 이전에 이 변수를 어떻게 알았습니까? 어쩌면 다른 프로그램에서는 다른 유사한 변수를 존중 하지만 해당 변수가 다음과 같이 설정될 것으로 예상하지 않을 수도 있습니다.su
ENV_ROOTPATH
foo.exe
SOME_WEIRD_PATH_VARIABLE_NAME
PATH
PATH_SET
파일 경로1
그러나 또는 으로 설정할 수도 있습니다 0
. 우리는 PATH_SET
무엇을 설정해야할지 모르겠어요 pwd
, 그렇죠? :-)