설치가 끝나고 brew는 openvpn이 있다고 하는데 셸은 command not found라고 답합니다. 바이너리는 존재하며, 셸이 한 번도 알려주지 않은 디렉터리에 놓여 있을 뿐입니다. Homebrew는 데몬형 바이너리를 접두사의 sbin 디렉터리에 연결하고, 기본 macOS PATH는 보통 bin 디렉터리를 포함하고 sbin은 포함하지 않습니다. 고장 난 것은 없으며 재설치로도 바뀌지 않습니다.

셸 파일을 편집하기 전에 네 가지 확인으로 이 메커니즘을 검증합니다.

이 포뮬러가 실제로 설치하는 것

openvpn 포뮬러는 명령줄 데몬을 빌드하므로 실행 파일이 bin이 아니라 sbin 아래에 놓입니다. 이어서 Homebrew가 그 바이너리를 접두사의 sbin 디렉터리에 연결하며, 그래서 "$(brew --prefix)/sbin/openvpn" --version는 동작하지만 맨 호출은 동작하지 않습니다. 버전이 붙은 Cellar 디렉터리에도 사본이 있고, 그 경로를 시작 파일에 넣는 것이 업그레이드 후에도 오래된 빌드에 고정되는 방식입니다.

접두사 심볼릭 링크가 안정적인 경로입니다. Cellar 경로는 버전 번호가 들어 있는 구현 세부 사항입니다.

파일 시스템이 아니라 Homebrew에 물으십시오

어느 설치가 이 포뮬러를 소유하는지 아는 패키지 관리자부터 시작해 command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn 순서로 확인합니다. 마지막 것이 경로를 출력하면 포뮬러가 있고 문제는 오로지 해석입니다. 아무것도 출력하지 않으면 셸이 한 번도 설치되지 않은 패키지를 엉뚱한 곳에서 찾는 것이고, 그것은 다른 해법이 필요한 다른 문제입니다.

한 기기에 Homebrew 설치가 두 개일 때 이 문제가 가장 크게 드러나는데, 응답하는 brew가 설치한 brew와 같다는 보장은 없습니다.

셸이 sbin을 보지 못하는 이유

로그인 셸은 시스템 기본값과 시작 파일이 덧붙이는 모든 것에서 PATH를 구성합니다. Homebrew bin은 흔히 추가되지만 Homebrew sbin은 보통 추가되지 않으므로 데몬을 빼고 모든 명령이 동작합니다. command -v openvpn가 아무것도 반환하지 않는데 접두사 경로가 버전을 반환하는 것이 두 명령으로 끝나는 진단의 전부입니다. 디렉터리에 정말 링크가 있는지는 ls -l "$(brew --prefix)/sbin/openvpn"로 확인하십시오.

링크가 없는 것은 PATH 항목이 없는 것과 다른 고장이며, 둘 중 하나만 셸 파일 편집으로 고칠 수 있습니다.

경로는 한 번, 한 곳에서 고치십시오

현재 셸에서 빠르게 시험하려면 eval "$(brew shellenv)"가 설치 변수를 설정하고 두 디렉터리를 앞에 붙입니다. 영구적으로 정리하려면 사용하는 로그인 방식에 대해 셸이 읽는 유일한 시작 파일에 shellenv 줄을 넣고, bash와 zsh 파일에 내보내기를 흩뿌리지 마십시오.

그다음 새 터미널을 열고, 캐시된 셸이 계속 예전 PATH를 보고하므로 버전 질의를 다시 하십시오.

발견과 서비스는 분리해 두십시오

바이너리를 찾는 것은 VPN 서비스를 돌리는 것과 같지 않습니다. openvpn을 자동으로 시작하면 패키지 발견이 건드린 적 없는 프로필, 자격 증명, 권한, 수명 주기 요구가 더해집니다. Tunnelblick은 자체 엔진도 함께 넣으므로 방금 출력한 버전이 애플리케이션이 쓰는 버전과 무관할 수 있습니다.

어떤 실행 파일이 버전 출력을 만들었는지 기록하십시오. 그 한 줄이 다음에 두 버전이 어긋날 때 한 시간을 아껴 줍니다.

관련 글