Homebrew coloca o binario de OpenVPN en sbin, non no teu PATH
A fórmula instala o daemon de OpenVPN baixo sbin, que un PATH predeterminado de macOS non inclúe. Confirma o prefixo e despois corrixe a resolución nun só ficheiro.
A instalación remata, brew di que openvpn está alí, e o shell responde command not found. O binario existe; está nun directorio do que o shell nunca soubo. Homebrew liga os binarios de estilo daemon dentro do directorio sbin do prefixo, e un PATH predeterminado de macOS adoita incluír o directorio bin e non o sbin. Nada está roto, e ningunha reinstalación o cambiará.
Catro comprobacións confirman o mecanismo antes de que edites calquera ficheiro do shell.
Que instala realmente a fórmula
A fórmula openvpn constrúe un daemon de liña de ordes, así que o seu executable aterra baixo sbin en lugar de bin. Despois Homebrew liga ese binario dentro do directorio sbin do prefixo, e por iso "$(brew --prefix)/sbin/openvpn" --version funciona mentres que unha invocación simple non. O directorio Cellar con versión tamén garda unha copia, e pór esa ruta nun ficheiro de inicio é a forma en que unha máquina queda fixada a unha compilación antiga tras unha actualización.
A ligazón simbólica do prefixo é a ruta estable. A ruta de Cellar é un detalle de implementación cun número de versión dentro.
Pregunta a Homebrew, non ao sistema de ficheiros
Comeza polo xestor de paquetes, porque sabe que instalación posúe a fórmula: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn. Se o último imprime unha ruta, a fórmula está presente e a cuestión é só de resolución. Se non imprime nada, o shell busca no lugar equivocado un paquete que nunca se instalou, e iso é outro problema con outra solución.
Dúas instalacións de Homebrew nunha máquina é onde isto máis importa: o brew que responde non é necesariamente o brew que instalou.
Por que o shell non pode ver sbin
Un shell de inicio constrúe PATH a partir dos valores predeterminados do sistema máis todo o que engaden os teus ficheiros de inicio. O bin de Homebrew adoita engadirse e o sbin de Homebrew normalmente non, así que todos os comandos funcionan agás os daemons. command -v openvpn que non devolve nada mentres a ruta con prefixo devolve unha versión é todo o diagnóstico en dúas ordes. Confirma que o directorio realmente contén a ligazón con ls -l "$(brew --prefix)/sbin/openvpn".
Unha ligazón ausente é unha avaría distinta dunha entrada PATH ausente, e só unha das dúas se corrixe editando un ficheiro do shell.
Corrixe a ruta unha vez, nun só lugar
Para unha proba rápida no shell actual, eval "$(brew shellenv)" establece as variables de instalación e antepón ambos os directorios. Para un arranxo permanente, pon a liña de shellenv no único ficheiro de inicio que o teu shell le para o modo de inicio de sesión que usas, en lugar de repartir exports polos ficheiros de bash e zsh.
Despois abre un terminal novo e repite a consulta de versión, porque un shell en caché segue informando do PATH antigo.
Mantén o descubrimento separado do servizo
Atopar un binario non é o mesmo que executar un servizo VPN. Iniciar openvpn automaticamente engade requisitos de perfil, credenciais, privilexios e ciclo de vida que o descubrimento de paquetes nunca tocou. Tunnelblick ademais inclúe o seu propio motor, así que a versión que acabas de imprimir pode non ter nada que ver coa versión que usa a aplicación.
Anota que executable produciu a saída de versión. Esa soa liña aforra unha hora a próxima vez que dúas versións discrepen.