Инсталацията завършва, brew казва, че openvpn е налице, а шелът отговаря command not found. Двоичният файл съществува, просто стои в директория, за която на шела никога не е казвано. Homebrew свързва двоични файлове от демонен тип в директорията sbin на префикса, а стандартният PATH на macOS обикновено включва директорията bin, но не и sbin. Нищо не е счупено и преинсталиране няма да промени това.

Четири проверки потвърждават механизма, преди да редактирате който и да е файл на шела.

Какво всъщност инсталира формулата

Формулата openvpn изгражда демон за команден ред, затова изпълнимият файл попада под sbin, а не под bin. След това 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 също носи собствен двигател, затова версията, която току-що отпечатахте, може да няма нищо общо с версията, която приложението използва.

Запишете кой изпълним файл е произвел изхода за версията. Този един ред спестява час следващия път, когато две версии се разминат.

Подобни статии