- Настройка ZSH в Mac OS
- Где установить переменные окружения в Mac OS X 2021
- Полный обзор Mac OS X 10.11 El Capitan
- Отображение текущей среды и переменных оболочки в Mac OS X
- Установка переменных среды в командной строке Mac OS X
- Установка Временных переменных среды в OS X
- Использование переменных среды в Терминале на Mac
- Русские Блоги
- Перепечатано: (Mac) Несколько способов настроить путь к переменной среды в bash и zsh
- использованная литература
- 1. Введение
- 2. Тело
- 2.1 Несколько методов установки пути к переменной окружения в bash
- 2.2 Решите проблему, что переменные среды, настроенные под Mac, недействительны в ZSH
- Переход с bash на zsh
- Зачем переходить
- Отличия и совместимость
- Термины
- Текущие настройки
- setopt и emulate
- Параметры
- Массивы
- Шаблоны
- Флаги/Квалификаторы/Модификаторы
- autoload -Uz
- zstyle
- zmodload
- Разное
Настройка ZSH в Mac OS
Mar 22, 2017 · 1 min read
С недавних пор начал использовать Mac OS, почти сразу подумал, что стандартный терминал не очень-то и удобен.
В качестве оболочки будем использовать ZSH, о нём, думаю, не слышал только любитель красивых UI, а вместо стандартного терминала я использую iTerm2.
В Mac OS ZSH предустановлен, поэтому сразу устанавливаем его в качестве оболочки по умолчанию с помощью команды chsh -s /bin/zsh . После перезапуска терминала оболочкой должен быть уже ZSH, если попросит начать настройку, то прервём сей процесс, нажав q.
Ручками мы писать конфиги, разумеется, не будем, пусть это сделает “Oh My Szh”. Переходим в домашний каталог и выполняем:
След у ющим шагом откроем для редактирования файл
/.zshrc и изменим значение параметра ZSH_THEME на agnoster , сохраняемся и перезапускаем терминал. В этот момент вы, скорее всего, увидите криво (никак) отображаемые символы, всё это происходит из-за некоторых отсутствующих шрифтов в системе, исправим это:
- Скачаем архив — вот здесь .
- Перейдём в “ fonts-master/UbuntuMono/” и установим все шрифты в этой директории.
- В настройках терминала выставляем шрифт “ Ubuntu Mono derivative Powerline”.
После перезапуска терминала вы, наконец, сможете узреть нормально работающую тему “agnoster”.
Источник
Где установить переменные окружения в Mac OS X 2021
Полный обзор Mac OS X 10.11 El Capitan
В командной строке переменные среды определяются для текущей оболочки и становятся наследуемыми любой запущенной командой или процессом. Они могут определять что угодно, от оболочки по умолчанию, PATH, домашнего каталога пользователей, до типа эмуляции терминала, текущего рабочего каталога, в котором находится файл истории, настройки языка и локализации, и далее включать переменные оболочки, которые включают все от настроек до приглашения bash, цветного вывода ls, изменений внешнего вида терминала, псевдонимов и многого другого.
Давайте рассмотрим, как перечислять переменные среды и оболочки, а затем как устанавливать и добавлять новые переменные среды в командной строке Mac OS X.
Отображение текущей среды и переменных оболочки в Mac OS X
Чтобы быстро получить список переменных среды, вы можете использовать следующую команду:
Если вы хотите увидеть полный список переменных оболочки, можно также выполнить команду ‘set’:
Вывод этих команд может быть длинным, поэтому вы можете захотеть передать вывод через команды less или more.
Установка переменных среды в командной строке Mac OS X
Поскольку по умолчанию Mac использует оболочку bash, вы можете установить переменные окружения в пользовательских каталогах .bash_profile, для активной учетной записи пользователя путь к этому файлу находится по адресу:
Если вы изменили свою оболочку или не уверены, какую оболочку вы используете, вы всегда можете проверить, введя команду echo $ SHELL, которая покажет, какая оболочка используется. Мы предполагаем, что вы все еще используете оболочку bash по умолчанию для OS X, поэтому мы добавим новые переменные окружения, изменив .bash_profile с помощью nano — вы можете использовать vi, emacs или другой текстовый редактор, если хотите, но мы рассмотрим нано для простоты.
Начните с открытия .bash_profile в текстовом редакторе nano:
Вы можете добавить переменные окружения и переменные оболочки в новые строки, если в файле .bash_profile уже есть данные, просто обязательно добавьте новые переменные в новую пустую строку, используя при необходимости клавиши со стрелками и клавишу возврата.
Давайте возьмем пример и скажем, что мы собираемся установить переменные окружения JAVA_HOME и JRE_HOME в .bash_profile, добавив следующее в новые строки файла:
export JAVA_HOME=$(/usr/libexec/java_home)
export JRE_HOME=$(/usr/libexec/java_home)
Предполагая, что мы закончили, сохраните изменения, внесенные в .bash_profile, нажав Control + o (это o, как в выдре), затем выйдите из nano, нажав Control + X
Изменения и дополнения, внесенные в переменные среды, потребуют перезапуска оболочки или появления новой оболочки.
Установка Временных переменных среды в OS X
Стоит отметить, что вы также можете установить временные переменные среды в bash, используя саму команду «export», хотя они будут сохраняться только до тех пор, пока текущая оболочка bash остается активной. Например, если вы хотите добавить временный путь к
/ bin /, вы можете использовать следующую команду:
Опять же, команда «export», запускаемая сама по себе и не содержащаяся в .bash_profile, будет только временной настройкой, и переменная среды не будет сохраняться, пока вы не добавите ее в .bash_profile.
Если вы действительно хотите добавить новый PATH для использования, вы почти наверняка должны добавить его в .bash_profile, поместив соответствующую команду экспорта в файл.
Выходя за пределы оболочки bash, если вы изменили стандартную оболочку приложения терминала с bash на tcsh, zsh, sh, ksh, fish или любую другую альтернативную оболочку, вам просто нужно изменить соответствующий профиль или файл rc. для этой конкретной оболочки (.tschrc, .cshrc, .profile и т. д.).
Источник
Использование переменных среды в Терминале на Mac
Shell использует переменные среды для хранения информации, такой как имя текущего пользователя, имя хоста и пути по умолчанию к любым командам. Переменные среды наследуются всеми командами, которые исполняются в контексте shell, и некоторыми командами, которые зависят от переменных среды.
Вы можете создать переменные среды и использовать их для управления работой команды, не изменяя саму команду. Например, с помощью переменной среды можно сделать так, чтобы команда печатала отладочную информацию в консоль.
Чтобы задать значение для переменной среды, свяжите имя переменной с требуемым значением при помощи соответствующей команды shell. Например, чтобы задать для переменной PATH значение /bin:/sbin:/user/bin:/user/sbin:/system/Library/ , необходимо ввести следующую команду в окне «Терминала».
Чтобы просмотреть все переменные среды, введите:
При запуске приложения из shell приложение наследует значительную часть среды shell, в том числе экспортированные переменные среды. Эта форма наследования может быть полезна для динамической настройки приложения. Например, приложение может проверить наличие (или значение) переменной среды и изменить свою работу соответствующим образом.
Различные shell поддерживают различные семантики для экспорта переменных среды. Cм. man‑страницу предпочитаемой Вами оболочки shell.
Несмотря на то что дочерние процессы shell наследуют среду этой shell, различные shell имеют раздельные контексты исполнения, которые не делятся друг с другом информацией о среде. Переменные, заданные в одном окне Терминала, не передаются в другие окна Терминала.
После закрытия окна Терминала все переменные, которые Вы задали в этом окне, больше не доступны. Если Вы хотите, чтобы значение переменной сохранялось между различными сеансами и во всех окнах Терминала, настройте ее в загрузочном скрипте shell. Об изменении загрузочного скрипта оболочки zsh для сохранения переменных и других настроек между сеансами см. в разделе Invocation на man-странице оболочки zsh.
Источник
Русские Блоги
Перепечатано: (Mac) Несколько способов настроить путь к переменной среды в bash и zsh
использованная литература
Старая привычка, перечислите эту статьюСправкаилиЦитатаилиПереизданиеЯ хотел бы отдать должное документам и блогу
1.http://postgresapp.com/
2.http://postgresapp.com/documentation/cli-tools.html
3.http://www.yiibai.com/postgresql/2013080439.html
4. Ultimate Shell —— ZSH:https://zhuanlan.zhihu.com/p/19556676
5. Руководство по установке и настройке Zshhttp://www.linuxidc.com/Linux/2013-09/90377.htm
1. Введение
Mac обычно использует bash в качестве оболочки по умолчанию.
Выполнение этой команды в Linux немного отличается от Mac. Вы обнаружите, что на Mac есть дополнительный zsh, что означает, что в системе OS X предварительно установлен zsh. Это волшебное ракушка?
В настоящее время оболочкой по умолчанию для широко используемой системы Linux и системы OS X является bash, но действительно мощная оболочка — это скрытый zsh, который определенно представляет собой спортивный автомобиль в вагоне и спортивный автомобиль. Летающий автомобиль в истории назывался «Ultimate Shell», но из-за того, что конфигурация была слишком сложной, вначале это никого не волновало. Многие люди приходили посмотреть руководство по настройке zsh, развернулись и ушли, ничего не сказав . Пока однажды очень скучный иностранный программист не разработал проект zsh, который позволит вам быстро приступить к работе, под названием «oh my zsh». URL-адрес Github:https://github.com/robbyrussell/oh-my-zsh**。
2. Тело
2.1 Несколько методов установки пути к переменной окружения в bash
Переменные среды системы Mac, порядок загрузки:
/etc/profile
/etc/paths
/.bashrc
Конечно, / etc / profile и / etc / paths относятся к системному уровню, они будут загружены при запуске системы, а следующие несколько — это переменные среды текущего уровня пользователя. Следующие три читаются по порядку спереди, еслиФайл /.bash_profile существует, следующие файлы будут проигнорированы и не прочитаны, еслиЕсли файл /.bash_profile не существует, следующие файлы будут прочитаны по аналогии.
/ .bashrc не имеет вышеуказанных правил, он загружается при открытии оболочки bash.
Если нет специальных инструкций, синтаксис для установки PATH:
(1) Глобальные настройки
Следующие настройки файла являются глобальными и требуют прав root при изменении
1) / etc / paths (рекомендуется изменить этот файл глобально)
Измените пути и добавьте переменные среды в файл путей, по одному пути на строку.
Подсказка: при вводе переменных среды вам не нужно вводить их одну за другой, просто перетащите папку в Терминал.
2) / etc / profile (не рекомендуется изменять этот файл)
Глобальная (общедоступная) конфигурация, независимо от того, какой это пользователь, файл будет прочитан при входе в систему.
3) / etc / bashrc (обычно в этот файл добавляются переменные среды системного уровня)
Глобальная (общедоступная) конфигурация. При запуске оболочки bash, независимо от того, каким методом она является, этот файл будет прочитан.
4)
1. Создайте файл:
sudo touch /etc/paths.d/mysql
2. Используйте vim, чтобы открыть этот файл (если он открыт в open -t, редактирование запрещено):
sudo vim /etc/paths.d/mysql
3. Отредактируйте файл, введите путь и сохраните его (закройте окно Терминала и снова откройте его, вы можете использовать команду mysql)
/usr/local/mysql/bin
Говорят, что вы можете создавать новые файлы самостоятельно, вместо того, чтобы помещать все переменные в файл путей, что удобно для управления.
(2) Индивидуальные пользовательские настройки
/ .bash_profile (добавить переменные среды на уровне пользователя в любой файл)
(Примечание. Linux — это .bashrc, а Mac — .bash_profile)
Если оболочка bash выполняется в режиме входа в систему, этот файл будет прочитан. Файл выполняется только один раз! По умолчанию он устанавливает некоторые переменные среды
Установить псевдоним ll = ’ls -la’
Задайте переменные среды:
/ .bashrc То же, что и выше
Если вы хотите вступить в силу немедленно, вы можете выполнить следующую инструкцию:
$ источник соответствующего файла
После изменения общих переменных среды они вступят в силу после перезапуска.
2.2 Решите проблему, что переменные среды, настроенные под Mac, недействительны в ZSH
При настройке gradle я обнаружил, что после установки переменных среды в / etc / profiles его по-прежнему нельзя использовать в zsh. Но его можно нормально использовать в терминале. Позже было обнаружено, что он не был настроен в .zshrc.
Введите в терминале: cat
/ .zshrc, чтобы просмотреть файл .zshrc и найти внутри раздел «# Конфигурация пользователя». Вы можете увидеть все локально настроенные переменные среды, которые в настоящее время поддерживает zsh.
Добавьте путь к переменной среды, которую вы хотите настроить, в экспорте PATH = ”XXXX”.
Источник
Переход с bash на zsh
Чтобы перейти с bash на zsh необходимо знать базовые отличия между ними — без этого будет сложно провести первоначальную настройку zsh в
Я не нашёл краткого описания этих отличий когда переходил сам, и мне пришлось потратить немало времени на вычитывание документации zsh. Надеюсь, эта статья упростит вам переход на zsh.
Зачем переходить
Для начала — а стоит ли вообще тратить своё время и внимание на переход? Учить ещё один диалект sh, менее распространённый чем POSIX sh или bash, заново заниматься настройкой рабочего окружения…
На мой взгляд, если вы проводите много времени в консоли, вам нравятся Vim или Emacs и вы уже потратили немало времени на их настройку «под себя» — однозначно стоит! Zsh по духу очень на них похожа: это очень сложная и гибкая программа, чьи возможности полностью мало кто знает, но потратив некоторое время на настройку можно получить очень удобную лично вам рабочую среду.
Что касается изучения нового диалекта sh… пользы от этого, скорее всего, действительно мало, но описанного в этой статье минимума должно быть достаточно чтобы настраивать zsh, а писать новые скрипты на диалекте zsh вам никто и не предлагает. В общем и целом это ничем не отличается от необходимости минимально знать VimL или Emacs Lisp исключительно для настройки Vim/Emacs.
В инете куча статей и презентаций описывающих конкретные фичи zsh, значительно упростившие чью-то жизнь. Я не буду их перечислять, потому что фичи всем нужны разные, и в zsh найдутся варианты на любой вкус. Вместо этого я опишу ключевые особенности zsh, которые позволили реализовать эти фичи:
- Zsh не использует readline для ввода команд пользователем. Вместо этого используется собственный редактор ZLE (Zsh Line Editor). Это позволило реализовать множество фич: удобное редактирование многострочных команд, подсветку синтаксиса прямо в процессе ввода команды, особую обработку «paste» из clipboard чтобы не выполнить случайно вставленный текст, гибкое управление горячими клавишами, undo (в т.ч. отменяющее результат автодополнения и разворачивания glob-ов)… плюс интегрировать функционал редактора с zsh, что позволяет управлять его поведением через обычные функции zsh (например, подсветка синтаксиса так и реализована).
- Невероятно сложный и гибкий механизм автодополнения команд. Он сильно зависит от контекста, поэтому при нажатии в разных местах командной строки будут дополняться разные вещи: имена команд, их параметры, файлы, имена пользователей и серверов, номера процессов, названия переменных, индексы массивов и ключи хешей, элементы синтаксиса zsh, названия цветов и шрифтов, сетевых интерфейсов, системных пакетов… короче, вообще всего что можно автодополнять. И его можно детально контролировать, вплоть до изменения логики автодополнения для конкретного контекста у конкретной команды.
- Громадное количество (177 в zsh-5.2) опций, изменяющих поведение zsh. С их помощью можно, например, изменять поддерживаемый синтаксис и включать (в т.ч. частично) режимы совместимости с sh/bash/ksh/csh. Они позволяют настолько значительно влиять на работу, что в zsh пришлось сделать отдельный «режим совместимости с zsh», который многие функции обычно включают первой командой, потому что только это даёт им гарантию, что код этой функции будет понят zsh именно так, как ожидал его автор.
- Предпочтение максимально сжатого, краткого синтаксиса — чтобы вам нужно было набирать как можно меньше текста для выполнения типичных, пусть даже довольно сложных, задач. В коде, где важна читабельность через месяц — это однозначно минус. Но в командной строке — однозначно плюс.
- Модульная организация настроек через фреймворки (вроде oh-my-zsh и prezto), плагины, темы, etc. На самом деле здесь нет ничего специфичного для zsh, ровно то же самое можно сделать и для bash, но… почему-то для zsh всё это уже есть, а для bash — нет (а если и есть, то про это мало кто знает). А это даёт возможность относительно быстро собрать свой вариант настроек zsh из готовых «кубиков» (как пример, посмотрите видео менеджера плагинов zsh Аntigen), точно так же, как обвешивается плагинами Vim.
Отличия и совместимость
Ещё раз уточню, что я буду описывать именно отличия от bash, а не полный набор возможностей zsh. Большая часть привычного вам функционала работает в zsh точно так же, как и в bash. Но при этом часто есть специфичные для zsh способы делать примерно то же самое. Это связано с тем, что в zsh уделяется очень много внимания совместимости с другими шеллами, поэтому в zsh плюс к своим фичам перетащили очень многое из других шеллов — и в результате получили несколько альтернативных способов делать одно и то же.
Термины
Текущие настройки
Многие встроенные команды выводят текущее состояние при запуске без аргументов (плюс нередко у них есть аргумент, который оформляет вывод в стиле команд zsh, что довольно удобно).
Это далеко не полный список, но для большинства задач в процессе (анализа) настройки zsh его должно хватить.
Ещё может быть полезным запуск zsh -f — это запускает zsh в состоянии по умолчанию (без выполнения любых стартовых скриптов кроме /etc/zshenv , которого в большинстве систем и так нет).
setopt и emulate
- В именах опций регистр и подчёркивания значения не имеют, плюс перед любой опцией можно добавить префикс «no».
- Вызов для одной и той же опции setopt с префиксом «no» и unsetopt без «no» (равно как и наоборот!) делают одно и то же.
- В выводе setopt используются маленькие буквы без подчёркиваний, в документации используются большие буквы с подчёркиваниями. Это создаёт некоторое неудобство — при поиске в документации нужно догадаться, где вставлять подчёркивания чтобы найти нужную опцию.
- Команда emulate позволяет массово установить группу опций в состояние совместимости с sh, ksh, csh или в состояние по умолчанию для zsh. Многие функции в zsh начинаются командой emulate -L zsh , что позволяет на время выполнения функции привести ключевые опции в состояние по умолчанию для zsh — без этого большинство нетривиальных функций может ломаться из-за выставленных пользователем опций (например, есть опция которая управляет тем, как индексируются массивы — от 1 или от 0).
В начале использования zsh, для более привычной работы после bash, я бы рекомендовал следующие опции:
Ещё есть опция SH_WORD_SPLIT , и формально для привычной работы после bash её тоже надо включить, но я бы этого не рекомендовал: поведение zsh без этой опции более удобное и логичное, лучше сразу к нему привыкать. Она отвечает за то, как сработает cmd $PARAM если значение $PARAM это строка содержащая пробелы: в bash cmd получит несколько аргументов, а в zsh — один (как если бы вызвали cmd «$PARAM» ). А если $PARAM это массив, то zsh передаст cmd по одному аргументу на каждый не пустой элемент массива (даже если эти элементы содержат пробелы).
(В основном, эта статья описывает поведение zsh с опциями по умолчанию, иначе каждое второе предложение пришлось бы уточнять в стиле «но вот при таких-то опциях всё это работает иначе».)
Параметры
Массивы
Шаблоны
и ^ (исключение из совпадения)
Флаги/Квалификаторы/Модификаторы
Квалификаторы есть только у шаблонов, они позволяют задать дополнительные условия отбора файла: по типу (файл/каталог/симлинк/etc.), правам, времени (изменения/etc.), размеру… Можно сортировать и индексировать отобранные файлы. Можно включить для конкретно этого шаблона совпадение начальной * с именами начинающимися на точку. Можно включить удаление этого шаблона из аргументов командной строки если он не совпал ни с одним файлом.
Если включить опцию EXTENDED_GLOB , то в шаблонах можно будет использовать флаги: для файлов интерес представляет управление чувствительностью к регистру, а при совпадении с параметром/строкой есть и другие полезные флаги.
Для параметров доступно намного больше флагов: вывод всех (включая пустые) элементов массива даже в кавычках, выполнение join или split по заданной подстроке, вывод только ключей и/или значений ассоциативного массива, экранирование разными видами кавычек и обратная операция, etc.
И для шаблонов и для параметров можно использовать модификаторы: удаление последнего элемента пути, удаление всех элементов пути кроме последнего, удалить/оставить расширение, экранирование и обратная операция, поиск и замена подстроки, etc.
autoload -Uz
Помимо традиционного способа подгружать код через source /path/to/file.sh или . /path/to/file.sh в zsh активно используется автозагрузка кода в момент первого вызова функции.
Для поиска файла с нужной функцией используется $FPATH — переменная аналогичная по формату $PATH , содержащая список каталогов в которых выполняется поиск файла с именем, идентичным имени загружаемой функции.
При вызове autoload никаких файлов с диска не считывается, и даже не проверяется их наличие — всё это произойдёт при первом вызове функции. Практически всегда необходимо передавать autoload аргументы -U (отменяет эффект текущих alias-ов для загружаемого файла, потому что нередко alias-ы настроенные пользователем могут нарушать работу сторонних функций) и -z (необязательное уточнение что загружаемый файл — в формате zsh, но безопаснее его всегда задавать).
При этом содержимое файла
/my-zsh-functions/fn может быть в одном из этих трёх форматов:
При первом запуске zsh нередко оказывается, что часть кнопок вроде F1/Backspace/Delete/курсора работает некорректно. Это связано с тем, что абсолютное большинство консольных приложений использует readline и корректная настройка этих кнопок считывается из /etc/inputrc и
/.inputrc , а zsh этого не делает.
Проблема решается в лоб — нужно посмотреть, какие escape-последовательности выдают нужные кнопки в вашем терминале и задать в
/.zshrc нужные обработчики для этих escape-последовательностей. Примерно так:
Смотреть выдаваемые кнопками последовательности можно запустив cat >/dev/null и нажимая Ctrl-V перед нужной кнопкой. (И таки да, занимаясь этим в 2017 я чувствовал себя немного странно…) Но в комплекте с zsh идёт вспомогательная утилита zkbd , которая автоматизирует этот процесс. Для этого необходимо подключить её в
/.zshrc , после чего у вас появится ассоциативный массив $key содержащий нужные escape-последовательности:
Я не уточняю детально какие команды (вроде up-line-or-history ) на какие кнопки назначать потому, что во-первых назначать надо не все подряд, а только те, которые у вас из коробки не заработают, и во-вторых если мнения насчёт того, что должны делать Home или Backspace у всех сходятся, то вот поиск в истории по Up и Down может выполняться довольно разными способами, и функции в этих случаях на эти кнопки надо назначать тоже разные.
(Кстати, задавать символ Escape ( ^[ ) в параметре bindkey можно и настоящим символом, вводя его через Ctrl-V , и двумя обычными символами ^[ , и двумя символами \e .)
zstyle
Это встроенный способ использовать контекстно-зависимые настройки. Он во многом похож на обычные параметры, только помимо имени и значения параметра zstyle позволяет задать шаблон «контекста». А потом получать значения относящиеся к текущему контексту. Этот подход активно используется для настройки работы автодополнений, но им можно пользоваться и для своих скриптов.
zmodload
Часть дополнительного функционала zsh реализована не в обычных скриптах подгружаемых через autoload -Uz , а как системные библиотеки *.so . Они используются, например, для предоставления доступа к регулярным выражениям PCRE, математическим функциям, сокетам, etc. Такие библиотеки подгружаются через zmodload .
Разное
Для перехвата сигналов помимо стандартного trap ‘…;code;…’ INT можно использовать функции с особыми именами: TRAPINT() < …;code;… >.
У многих конструкций вроде if , while , etc. есть сокращённая форма (пример есть выше, где выводилось значение всех режимов bindkey).
Внезапно, zsh-специфичный аналог echo — команда print — оказалась весьма удобной при изучении zsh. Она много чего умеет, но из самого полезного:
Если Когда решитесь переходить на zsh, то для принятия конкретных решений про фреймворки/модули/темы вам пригодится Awesome-коллекция всего для zsh.
Источник