PKG_CONFIG_PATH를 CentOS로 설정하려고 합니다. 아래는 제가 시도하는 코드입니다.
export |grep PKG_CONFIG_PATH
출력이 안되고 정상...
echo "$PKG_CONFIG_PATH"
:/usr/local/lib/pkgconfig
여기에 출력이 있는 이유는 무엇입니까? ?
만약 내가
sudo sh -c "echo 'export PKG_CONFIG_PATH=$PKG_CONFIG_PATH :/usr/local/lib/pkgconfig' >> /etc/profile.d/path.sh
source /etc/profile.d/path.sh
이제 같은 경로가 두 번 나타납니다...
export |grep PKG_CONFIG_PATH
declare -x PKG_CONFIG_PATH=:/usr/local/lib/pkgconfig:/usr/local/lib/pkgconfig
그렇다면 경로가 아직 설정되지 않은 경우 $PKG_CONFIG_PATH는 어디서 오는 걸까요?
업데이트된 편집: 재부팅 후 변수가 지워지기 때문에 질문의 첫 번째 부분은 실제로 중요하지 않습니다.
진짜 문제는 profile.d에 있는 파일이 /etc/bashrc에 의해 두 번 호출되고 /etc/profile에 의해 한 번 호출되기 때문이라고 생각합니다. WTH에게 물어볼 수도 있나요? 왜 이런 일이 발생합니까? 벌레? 오식?
답변1
그게 차이점이에요출구그리고비수출환경 변수.
이 export
명령은 목록만 나열합니다.내보낸 환경 변수export
즉, 쉘이 상위 프로세스에서 상속했거나 또는 명령 declare -x
을 사용하여 내보내기 가능으로 표시했기 때문에 하위 프로세스에서 상속 가능으로 표시된 변수입니다 .
내보내지 않은 변수는 스크립트 내에서 사용할 수 있지만 하위 프로세스의 환경을 방해하지 않으므로 스크립트에 유용합니다.
내보내지 않은 변수를 설정하려면 name=value
다음 구문만 사용하면 됩니다.
$ FOO=bar
$ echo $FOO
bar
export | grep FOO
$
나중에 변수를 내보내기 가능으로 표시할 수 있습니다.
...
$ export FOO
$ export | grep FOO
declare -x FOO="bar"
실제로 고전적인 Bourne 쉘필수의2단계 프로세스로 환경 변수를 초기화할 수 있습니다. 먼저 값을 설정한 다음 내보내기 가능으로 표시합니다. 따라서 최대 이식성을 위해 설계된 셸 스크립트에서는 이 구문을 계속 볼 수 있습니다.
FOO=bar
export FOO
최신 셸을 사용하면 이 작업을 한 단계로 수행할 수 있습니다.
$ export FOO=bar
따라서 귀하의 경우에는 PKG_CONFIG_PATH=:/usr/local/lib/pkgconfig
이전에 수동으로 수행했거나원천스크립트 또는 로그인 스크립트의 일부로.
답변2
이제 두 가지 해결책이 있습니다.
/etc/bashrc에서 이 코드를 제거하세요.
for i in /etc/profile.d/*.sh; do if [ -r "$i" ]; then if [ "$PS1" ]; then . "$i" else . "$i" >/dev/null fi fi done
문제는 애초에 이 코드가 왜 거기에 있어야 하는지 알 수 없고, 코드를 제거하면 부작용이 발생할 수 있다는 것입니다.
/etc/profile.d/*.sh에서 직접 할당을 사용하세요.
export PKG_CONFIG_PATH=:/usr/local/lib/pkgconfig
물론 이는 기존 경로를 제외하며 표준 관행이 아닙니다.
그들 중 누구도 완벽한 해결책이 아닌 것 같습니다. 더 나은 제안이 있습니까?
고쳐 쓰다:
①을 실행하면 터미널에 입력된 각 명령 후에 이 오류 메시지가 나타납니다.
bash: __vte_prompt_command: command not found