La instal·lació acaba, brew diu que openvpn hi és, i la shell respon command not found. El binari existeix; és en un directori que la shell mai no ha conegut. Homebrew enllaça els binaris d'estil dimoni dins del directori sbin del prefix, i un PATH predeterminat de macOS normalment inclou el directori bin i no el sbin. No hi ha res trencat, i cap reinstal·lació ho canviarà.

Quatre comprovacions confirmen el mecanisme abans que editis cap fitxer de la shell.

Què instal·la realment la fórmula

La fórmula openvpn construeix un dimoni de línia d'ordres, així que el seu executable acaba sota sbin en lloc de bin. Després Homebrew enllaça aquest binari dins del directori sbin del prefix, i per això "$(brew --prefix)/sbin/openvpn" --version funciona mentre que una invocació nua no ho fa. El directori Cellar versionat també guarda una còpia, i posar aquest camí en un fitxer d'inici és com una màquina queda fixada a una compilació antiga després d'una actualització.

L'enllaç simbòlic del prefix és el camí estable. El camí del Cellar és un detall d'implementació amb un número de versió a dins.

Pregunta a Homebrew, no al sistema de fitxers

Comença pel gestor de paquets, perquè sap quina instal·lació posseeix la fórmula: command -v brew, brew --prefix, brew list --versions openvpn, brew --prefix openvpn. Si l'última imprimeix un camí, la fórmula hi és i la qüestió és només de resolució. Si no imprimeix res, la shell busca al lloc equivocat un paquet que mai no s'ha instal·lat, i això és un altre problema amb una altra solució.

Dues instal·lacions de Homebrew en una màquina és on això importa més: el brew que respon no és necessàriament el brew que ha instal·lat.

Per què la shell no pot veure sbin

Una shell d'inici construeix el PATH a partir dels valors predeterminats del sistema més tot el que afegeixen els teus fitxers d'inici. El bin de Homebrew se sol afegir i el sbin de Homebrew normalment no, així que cada ordre funciona excepte els dimonis. command -v openvpn que no retorna res mentre el camí amb prefix retorna una versió és tot el diagnòstic en dues ordres. Confirma que el directori realment conté l'enllaç amb ls -l "$(brew --prefix)/sbin/openvpn".

Un enllaç que falta és una avaria diferent d'una entrada de PATH que falta, i només una de les dues es corregeix editant un fitxer de la shell.

Arregla el camí una vegada, en un sol lloc

Per a una prova ràpida a la shell actual, eval "$(brew shellenv)" estableix les variables d'instal·lació i posa els dos directoris al davant. Per a un arranjament permanent, posa la línia de shellenv a l'únic fitxer d'inici que la teva shell llegeix per al mode d'inici de sessió que uses, en lloc d'escampar exports pels fitxers de bash i zsh.

Després obre un terminal nou i repeteix la consulta de versió, perquè una shell amb memòria cau continua informant del PATH antic.

Mantingues el descobriment separat del servei

Trobar un binari no és el mateix que executar un servei VPN. Iniciar openvpn automàticament afegeix requisits de perfil, credencials, privilegis i cicle de vida que el descobriment de paquets mai no ha tocat. Tunnelblick també inclou el seu propi motor, així que la versió que acabes d'imprimir pot no tenir res a veure amb la versió que fa servir l'aplicació.

Anota quin executable ha produït la sortida de versió. Aquesta sola línia estalvia una hora el proper cop que dues versions discrepin.

Articles relacionats