Похоже, вы изменили стандартную переменную PATH, которая наследуется приложениями с графическим интерфейсом (включая большинство бегунов AppleScript). Если вам просто нужно быстрое исправление, вы сможете сделать то, что указывает Hasaan Chop: просто измените sed
на /usr/bin/sed
в коде AppleScript, сохраните его и перезапустите установщик (хотя вы можете столкнуться с подобным проблемы с другими командами).
Если вы хотите исправить проблему, из-за которой /usr/bin
отсутствовал в стандартном PATH, вам нужно будет немного покопаться, чтобы выяснить, где возникла проблема.
Обратите внимание, что (как вы косвенно выяснили) «путь по умолчанию», который видит приложение, отличается от «пути», который оболочка «входа», запущенная терминалом, создаст для себя.
Оболочки в семействе Bourne (bash, zsh, ksh и т.д.) В режиме «login» запустят /etc/profile
который (обычно) полностью сбрасывает PATH к новому значению (также файлы инициализации оболочки для каждого пользователя обычно добавляют различные другие каталоги в PATH). Суть в том, что файлы инициализации оболочки не имеют ничего общего с PATH, который видят приложения (есть исключения (например, Aquamacs), но они редки).
Обычное место для пользовательских переменных среды по умолчанию - ~/.MacOSX/environment.plist
.
Этот файл читается во время входа в систему и используется для добавления новых (или переопределения существующих) переменных среды для приложений, запущенных в текущем сеансе входа в систему.
Для просмотра и / или редактирования этого файла вы можете использовать специализированный инструмент, такой как RCEnvironment (рекомендуется).
Или, поскольку этот файл представляет собой файл plist, вы можете использовать редактор списков свойств (из средств разработки) или инструменты командной строки, такие как значения по умолчанию или PlistBuddy .
Если файл в формате XML (вероятно), то вы могли бы даже использовать простой текстовый редактор.
Другим возможным местом для настроенных переменных среды по умолчанию является набор файлов конфигурации launchd .
Эти файлы могут содержать любые подкоманды launchctl, включая подкоманды setenv
и unsetenv
которые могут изменить среду, наследуемую дочерними процессами.
Индивидуальная настройка может быть выполнена в ~/.launchd.conf
. Общесистемная настройка выполняется в /etc/launchd.conf
.
Если вы обнаружите, что один из этих файлов манипулирует переменной окружения PATH, вы должны либо избавиться от манипуляции PATH (чтобы позволить значению по умолчанию проходить через приложения), либо добавить низкоуровневые каталоги по умолчанию (например, /usr/bin:/bin:/usr/sbin:/sbin
) в любые пользовательские каталоги, которые вам нужны в PATH.
Если вы в конечном итоге вносите изменения в файл для каждого пользователя (~/.MacOSX/environment.plist
или ~/.launchd.conf
), то самый простой способ сделать изменения эффективными - выйти из системы (полный выход из системы, а не просто быстрое переключение пользователей) и войти в систему. Если вам пришлось изменить общесистемный файл, то проще всего перезагрузить компьютер. Технически можно начать использовать новые значения без перезагрузки или выхода из системы, это оставлено как «упражнение для читателя».
Следующее является исключением в отношении последствий этой единственной строки кода AppleScript, это не относится к проблеме PATH.
В этой строке кода также есть другая потенциальная ошибка (невозможность правильно заключить строковое значение currdir
в код оболочки). Сама строка должна добавлять обратную косую черту перед каждым пробелом в строке. Наиболее вероятная причина сделать это, чтобы полученная строка могла быть непосредственно вставлена в другой битовый код оболочки. Проблема заключается в том, что существует много других символов, которые необходимо экранировать таким же образом, если код оболочки будет работать должным образом при наличии любой строки. Обе эти проблемы (на самом деле это одна и та же проблема) могут быть легко решены с помощью quoted form of
команды AppleScript. Тот факт, что сценарий не использует quoted form of
является признаком неопытности, которая заставляет меня нервничать по поводу того, что еще сценарий может делать неправильно.