Что такое bash mac os

Обновлено: 04.07.2024

Я покупаю IMAC. Я давно работаю над Linux и занимаюсь сценариями bash. Мне было интересно, все ли команды и функции bash доступны в Mac OS? У кого-нибудь есть опыт работы со скриптами для Mac bash? Я ценю ваш вклад.

Сам Bash будет в основном таким же. Будет несколько небольших отличий, но ни одно из них не повлияет на переносимость ваших скриптов.

Основная проблема заключается в том, что coreutils для MacOS основаны на FreeBSD, в то время как утилиты, к которым вы привыкли, наиболее вероятны из проекта GNU. Coreutils FreeBSD не всегда совместимы с coreutils GNU. Существуют различия в производительности и поведении между версиями sed , grep , ps и других утилит GNU и FreeBSD .

Вы можете установить GNU coreutils, но у них есть g- префиксы (например, gcat для cat ). Это не очень хорошая идея , чтобы заменить MacOS Coreutils с GNU Coreutils.

Следует подчеркнуть, что использование стандартных базовых утилит на основе FreeBSD может повлиять на переносимость ваших скриптов (например, ps имеет разные флаги, как и grep ). Я несколько раз ударился головой о стену, пытаясь понять, почему мой скрипт Ubuntu не выдает такой же результат на моем Mac. @ChrisGregg: я согласен. Я добавил немного в свой ответ, чтобы подчеркнуть, что между двумя наборами инструментов есть несовместимости.

Если это имеет значение, bash на Mac OS X Mountain Lion по-прежнему версия 3.2. Большинство дистрибутивов Linux в настоящее время поставляются с 4.x, поэтому вам не хватит версии 4. В настоящее время версия 4.2.45 доступна от Homebrew в качестве обходного пути. Я не знаю, какая версия есть в Mavericks, я не уверен, что кому-то, кто знает, разрешено говорить.

Как уже упоминалось другими, bash это то же самое bash (кроме уже отмеченных версий), но Mac OS X использует (в основном) BSD. Многие из стандартных системных утилит имеют несколько разные параметры или ведут себя немного иначе. Их, к сожалению, слишком много, чтобы перечислять здесь.

Спустя 4 года bash на High Sierra все еще использует: GNU bash, версия 3.2.57 (1) -релиз (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.

Установите homebrew (менеджер пакетов), затем установите версии GNU некоторых основных утилит:

После каждой установки будут отображаться шаги, которые вы можете выполнить, чтобы вы могли просто вызывать date их, gdate например, вместо того , чтобы вы все еще могли использовать свои сценарии Linux bash без каких-либо изменений.

Поздравляем, вы только что решили 99% проблем межплатформенного скриптинга.

Одна вещь, которая может расстраивать переход с Linux на Mac, - это отсутствие /proc псевдофайловой системы. Это сломало ряд моих сценариев Linux, и может быть непросто найти подходящие способы получить ту же информацию, что и proc в вашем скрипте Mac bash.

Я «в основном Linux, иногда Mac», и я считаю, что:

/.bash_aliases основном работают одинаково.


Сегодня я расскажу как увеличить эффективность работы в Mac OS X за счёт использования консоли.

Думаю, ни для кого не секрет, что Mac OS является Unix-based системой, но переработанной почти до неузнаваемости. Даже консоль засунули куда подальше — не сразу и найдёшь. И вся система нацелена на использование GUI, при дефолтных настройках даже переключение между кнопками по Tab не работает — без мыши никуда. И тем не менее, Мак — это не только окошки, не только док и лаунчер. Мак это ещё и вся мощь shell скриптов и консоли!

Если Вы пришли из мира M$, то для начала неплохо бы поучить общие команды shell'а, например, по вот этому учебному пособию. Как минимум, нужно усвоить команды перехода по каталогам и способы запуска программ и скриптов.

Если Вы пришли в мир Mac OS из мира Linux'а и FreeBSD, то, скорее всего, знаете как минимум основы shell-скриптинга. Но и для вас в статье может оказаться кое-что интересное, ведь в маке есть уникальные консольные команды, которые так же полезно знать.

Вот о некоторых особенностях маковской консоли далее и пойдёт речь.



Для начала избавимся от стандартного терминала. Ну, точнее, поставим другой — получше. Я лично предпочитаю iTerm2, который подходит для работы куда лучше системного. Хотя, и у него бывают интересные моменты (см. картинку вверху).

Далее нам могут понадобиться дополнительные инструменты, поэтому устанавливаем MacPorts (хотя, конечно, можно и другой менеджер пакетов). Теперь мы можем ставить нужные консольные утилиты с помощью простых команд. Например, ставим Midnight Commander (он в любом случае может пригодиться), набираем в iTerm2:


После ввода пароля и установки зависимостей и самого mc, можем его запустить, как вы уже догадались, командой mc .

О ужас! Нам понадобятся функциональные клавиши, а они нажимаются только через Fn+F15 , что же делать? Ну как что — лезть в системные настройки и выключать это. Иначе сложно будет с mc работать.

Ещё одно важное замечание: кури мануалы если что-то не понятно, набираем в консоли man команда — и получаем подробное описание команды. (Кстати, для выхода из просмотра мануала надо просто нажать Q).

Легко можно заметить, что mc показывает куда больше файлов и папок, чем Finder. Конечно, можно поставить хак для него, чтобы он отображал такие файлы, но не все это любят. Так что остаётся лишь пользоваться Cmd+Shift+G и вводить вручную имя папки. Но данный способ не особо удобен: нет автокомплита, нет возможности видеть скрытые файлы. Теперь вернёмся к терминалу. В Mac OS X есть замечательнейшая команда open , которая действует так, как будто пользователь сделал даблклик на файле или папке в Finder — открывает файл, бандл или ссылку в связанной программе, открывает папку в Finder'е. Вот простой пример работы с этой командой: заходим с помощью mc в скрытую папку (например, /etc/) и набираем:

Wuala! Файндер отобразил нам нашу системную папку! Но это ещё не всё, ведь скрытые файлы всё ещё не видны. Для примера, откроем наш .profile :


И — опа! — скрытый файл открылся в TextEdit! Всё предельно просто.

Пара слов о бандлах


Это всем известно, но на всякий случай повторю: обычные программы в Mac OS X на самом деле являются папками с расширением .app и особым образом устроенным содержимым. Убедиться в этом легко: открываем в Finder папку /Applications/ и делаем Ctrl+Click (либо Right-Click , если хотите) на любой программе и выбираем «Показать содержимое пакета».

Из консоли это так же очень хорошо видно: mc отображает эти программы именно как папки. И как же запустить из консоли GUI-программу, спросите вы? Очень просто, есть даже два способа.

Способ первый, простейший:


Программа будет запущена и консоль будет свободна для дальнейших действий.

Способ второй, интересный:


Программа будет запущена, но консоль не освобидится — она будет ждать завершения программы и выводить всё, что программа захочет вывести в неё. То есть, таким образом можно посмотреть рабочий лог некоторых программ.

Ещё одно очень важное различие между этими двумя методами: второй позволяет запустить два экземпляра программы, в то время как первый активирует уже запущенную, буде такая имеется. Так что через консоль можно решить и эту проблему (хотя, скорее фичу) макоси: через Finder, док и лаунчер запустить два экземпляра программы нельзя, а вот из консоли — пожалуйста, хоть двадцать два.

Расскажу вкратце что из себя представляет shell-скрипт. По сути — это обычный текстовый файл, содержащий серию команд для выполнения. Самый простой скрипт просто запускает последовательно все команды. Скрипты посложнее могут иметь условия, циклы и функции, то есть, скрипт может быть весьма большой и сложной программой. Основной плюс таких скриптов — на их службе вся мощь консольных утилит из мира unix, что с лихвой компенсирует бедность языковых конструкций. Приведу простой пример скрипта, который преобразует все файлы .jpg в текущей директории, уменьшив их размер до 200 пикселей в ширину или высоту.


Пример простейший, но он демонстрирует главное: в скриптах сокрыта великая сила.

В Mac OS X имеется несколько встроенных механизмов по автоматизации действий. Один из очень распространённых — AppleScript, для которого есть и графический редактор-запускатор. Но использовать такие скрипты можно и из консоли, для этого есть особая утилита — osascript . Использовать её можно так:

Не буду углубляться в AppleScript, он заслуживает отдельной статьи, и даже не одной. Так что рекомендую почитать справку или гугл по нему.

Главное: Вы можете комбинировать shell-скрипты со скриптами AppleScript, чтобы добиться максимальной гибкости в работе! К примеру, я использую такие вот смешанные скрипты для автоматической стилизации образа диска: сам диск создаётся с помощью shell (см. ниже), а фон и расположение элементов в образе задаётся с помощью AppleScript.

Есть ещё Automator, но он совсем уж GUI-шный, так что в данной статье его рассматривать бессмысленно. Он, конечно, полезный, но до мощи консоли не дотягивает.

Полный (ну, почти) список уникальных для макоси команд можно найти в одной хорошей статье (хотя сведения там немного устарели), я же вкратце расскажу о наиболее интересных.

Для работы с образами дисков имеется консольная утилита hdiutil . Пара примеров работы с ней:


Более подробно про возможности можно узнать из man hdiutil .

Если Вы — разработчик программ для макоси, то наверняка знаете о такой замечательной вещи, как Info.plist, да и вообще о plist'ах. Так вот, есть очень удобная утилита, позволяющая конвертировать .plist в .bplist, то есть, в более быстрый и лёгкий бинарный формат плиста.

Если хотите позаниматься ерундой, то можно из консоли проговорить любой текст. Для этого есть утилита say .


Так же можно задавать голос, которым мак будет с нами говорить:


Одна беда — по-умолчанию говорит эта штука только по-английски.

Теперь снимем скриншот командой из консоли.


Так же из консоли можно конвертировать текст между различными форматами. Например, можно переконвертировать .doc файл в HTML:


Так же textutil умеет преобразовывать кодировки.

Для изменения системных (и не только) настроек, можно использовать команду defaults . Используем её во благо! Включим наконец отображение скрытых файлов и папок в Finder!


Файндер автоматически перезапустится и теперь будет отображать скрытые файлы и папки! Но опять таки, это не всем нравится, так давайте это выключим, пока родителикто-нибудь не испугался или не удалил нужных файликов. Для сокрытия в уже указанной команде поставьте 0 вместо 1. Ну и для примера, ссылка на статью, где описано много твиков с помощью этой команды.

Ну что ж, мы разобрали некоторые интересные возможности консоли в Mac OS X. Статья, разумеется, не претендует на полноту и является, скорее, «заманухой» для вовлечения маководов в shell-скриптинг да и вообще в консоль.

В OS X обычный пользователь практически не сталкивается с необходимостью использовать командную строку, поскольку большинство его нужд покрывает то, что реализовано в графическом интерфейсе системы.

Другое дело, когда нужны некоторые скрытые возможности, которые недоступны из графического интерфейса. Собственно в этой рубрике мы частенько прибегаем к извлечению этих скрытых возможностей при помощи командной строки. А потому я и решил немного рассказать о программе Терминал и командной строке, а так же дать пару советов новичкам, которые позволят им ощущать себя в ней более комфортно.

Небольшое введение

Начнем с вопроса, что такое Терминал? Прежде всего, это приложение, внутри которого выполняется командный интерпретатор. Его еще часто называют интерфейсом командной строки. Он интерпретирует команды специального языка скриптов.

Языки скриптов бывают разные, но есть наиболее распространенный набор таких языков, а соответственно и их интерпретаторов.

В OS X, по умолчанию используется командный интерпретатор bash . Это улучшенный вариант интерпретатора Bourne shell, который обычно называют просто shell . И он тоже присутствует в нашей системе в виде файла /bin/sh . Правда не используется.

В настоящее время bash – фактически стандарт де-факто в большинстве Unix-подобных систем.

Так же достаточно популярен интерпретатор zsh , который в свою очередь является улучшенным bash (и он тоже есть в нашей системе), но стандартом де-факто он не стал. Возможно пока. Существует и еще целый ряд командных интерпретаторов, не получивших такого большого распространения как bash .

Командная строка

Когда вы запускаете программу Терминал, то видите в ее окне командную строку, которая в моей системе выглядит так:


Язык скриптов bash

Командный интерпретатор bash , как я уже написал выше, интерпретирует команды специального языка скриптов. Язык скриптов достаточно несложный язык программирования, который, как и любой язык программирования, предназначен для передачи команд и данных от человека к компьютеру.

Самой простой командой этого языка является запуск программы – она состоит только из имени файла программы и, если необходимо, то и полный путь до этого файла, а так же, возможно, с последующими за именем файла ключами и параметрами, которые дают различные указания выполняемой программе.

Приведу пример. Вы хотите посмотреть содержимое текущего каталога (при запуске Терминала, по умолчанию это будет ваш домашний каталог). Для этого в системе есть программа, находящаяся в файле ls . Ее запуск в командном интерпретаторе заключается во вводе имени файла этой программы и нажатием клавиши Enter:


Небольшое, но важное пояснение

Посмотреть содержимое переменной PATH вы можете командой:

Естественно эту переменную можно настраивать, но какой-то особой необходимости в этом у обычного пользователя не возникает, а потому я опущу этот вопрос.

Ну а теперь перейдем собственно к советам.

При использовании командной строки очень часто приходится вводить имена файлов – обычно это файлы различных команд, и вводить имена файлов или каталогов, передаваемых в качестве параметра командам, которые необходимо набирать с указанием полного пути до них. И вот для того, чтобы не ошибиться при наборе, в bash имеется механизм, называемый автодополнением.

Примечание: в дальнейшем, для удобства, я буду называть имя файла команды просто командой. Это общепринятая практика.

Смысл этого механизма заключается в том, что когда вы начинаете набирать команду, вводите первые несколько букв и нажимаете клавишу Tab, в результате чего набор команды будет завершен автоматически. Это же работает и при наборе пути и имен файлов, передаваемых командам в качестве параметров.


Как видно на картинке, имеется шесть команд, название которых начинается с disk , а потому интерпретатор предлагает уточнить следующую букву. В нашем случае нужно ввести букву u , для того, чтобы интерпретатор смог понять, что нам нужна именно команда diskutil , поскольку это единственная команда, начинающаяся с букв disku и затем нажать клавишу Tab. Команда будет дописана полностью.

Попробуйте ввести только буквы di и нажать два раза клавишу Tab. Команд, начинающихся на эти две буквы, будет еще больше. А вот если бы в системе была только одна команда, начинающаяся с букв di , то после первого же нажатия клавиши Tab, она была бы дописана полностью, поскольку интерпретатору не приходилось бы выбирать из разных вариантов.

Точно так же это действует и при наборе имен каталогов и файлов, передаваемых в качестве параметров командам.

Пример. Предположим мы хотим посмотреть содержимое вашего каталога Загрузки при помощи команды ls .

И сразу небольшое отступление.

На самом деле, каталога с названием Загрузки , в вашем домашнем каталоге нет. Это программа Finder, так показывает вам название каталога Downloads . То есть фактически переводит на русский язык слово Downloads . Сделано это для удобства пользователей.

Вы можете убедиться в этом, взглянув на второй сверху снимок экрана, где мы командой ls выводили содержимое домашнего каталога. Как видите, там нет каталога с названием Загрузки , но есть каталог Downloads . Точно так же вы там не увидите каталогов с названиями Библиотеки , Документы , Изображения , Музыка , Общие , Сайты и Фильмы , которые показывает вам программа Finder как перевод с английского на русский названий каталогов: Library , Documents , Pictures , Music , Public , Sites и Movies соответственно.

Итак, вернемся к просмотру содержимого каталога Загрузки (а на самом деле Downloads ) командой ls . Нам нужно ввести название каталога в качестве параметра к этой команде. Набираем ls Dow и нажимаем клавишу Tab, получаем команду ls Downloads , в результате выполнения которой и получим содержимое каталога Загрузки ( Downloads ).

Итак, мы ознакомились с автодополнением. Этот инструмент позволяет очень быстро и безошибочно вводить команды. Между прочим, многие файловые операции (копирование, перемещение, переименование, удаление) бывают гораздо проще и их быстрее выполнить именно в командной строке, используя механизм автодополнения. 🙂

Совет 2 – история команд

Это еще один механизм, облегчающий работу в командной строке. Дело в том, что интерпретатор bash запоминает все команды, которые вы выполняли. Он сохраняет всю историю команд в скрытом файле вашего домашнего каталога с названием .bash_history . Увидеть этот файл можно при помощи команды ls с ключом -la , т.е. ls -la . Попробуйте.

Надеюсь, это небольшое введение в основы мира командной строки, не слишком вас утомило. 🙂

Тест пинг любого веб-сайта или компьютера

Например, с её помощью гораздо проще – и быстрее! – искать затерявшийся где-то в недрах системы 5-гигабайтный файл или путь к приложению, которое, как вы думали, уже давно удалено.

Что такое «Терминал»?

Терминал – стандартная системная утилита для взаимодействия с Mac при помощи командной строки. В Linux есть похожий инструмент управления, т.к. обе ОС являются Unix-подобными.

Интерфейс командной строки (command line interface или сокращенно CLI) – он же язык общения с Терминалом – называется bash. Всё, о чем мы расскажем ниже – это bash-команды.

Общие команды для Mac

Основной синтаксис

Bash-команда обычно строится так:

[Команда] [Опции] [Ввод или путь к файлу или директории]

ls – это команда, -la – это соединение двух опций (-l и -a), а /Applications – это путь к списку.

Если вы поймете путь, то поймете и то, как macOS в действительности видит ваши файлы. Как? Да как в матрешке – одна за другой. Например, вот путь к файлу под названием «Мои секреты», лежащему на Рабочем столе: /Users/Yablykworld/Desktop/My Secrets.

Пробелы

С пробелами действует простое правило – ничего лишнего!

Почему? Дело в том, что bash считает пробел концом команды!

Если у вас есть папка с пробелами в названии – например, Yablyk Folder, и вы пытаетесь вывести её содержимое с помощью команды ls /Applications/Yablyk Folder, то соответствующий файл не будет найден, и на выходе появится ошибка:

Терминал на Mac (macOS): что это, команды, синтаксис

Чтобы решить эту проблему, понадобятся кавычки или обратный слэш. Вот теперь всё будет правильно:

ls /Applications/"Yablyk Folder" , или
ls /Applications/Yablyk\ Folder

Многим командам требуется доступ с уровня администратора. Если вы сейчас пользуетесь Mac не под аккаунтом его «админа», но знаете пароль, введите в командную строку перед текстом самой команды sudo – (что означает «single user do», «делает один пользователь»). Так вы временно получите привилегии администратора и возможность произвести необходимые операции без смены аккаунта.

Команды Терминала для улучшения продуктивности

  • Заменяет: Spotlight
  • Почему лучше: работает быстрее, осуществляет поиск и по системным папкам (тогда как Spotlight в них не ищет или плохо индексирует их содержимое).

Синтаксис find состоит из четырех частей:

2. путь к директории, в которой вы хотите искать информацию (например, /Applications);

3. опции (например, -name дает find возможность искать файлы, которые подходят к заданному названию);

4. непосредственно сам поисковый запрос (например, Google Chrome).

Вот как выглядит вся команда в целом:

find /Applications -d 1 -name "*Google Chrome*"

Примечание: «звездочки» (*) указывают на то, что используется regex (регулярные выражения).

  • Заменяет:⌘Cmd + I, т.е. команды для отображения информации;
  • Почему лучше: может показать сразу несколько папок за один раз, и обычно выполняется быстрее.

du – это сокращение от «disk usage». Команда поможет быстро узнать размер конкретного файла или папки, или даже списка файлов внутри папки.

Лучшие опции для du:

-d («глубина», или depth): если за этой буквой стоит цифра, то find ограничит поиск по директории соответствующим количеством уровней. Например, если вы отдадите вашему Mac команду du:

Терминал выдаст вам информацию только об общем «весе» папок и файлов в папке Applications, без данных о размере подпапок, вложенных в эти папки.

-h (human readable, или «человеко-читаемые»). Выводит размеры файлов в привычных людям величинах – K (килобайтах), М (мегабайтах) или G (гигабайтах).

Команда du в действии:

Терминал на Mac (macOS): что это, команды, синтаксис

  • Заменяет: ручной перенос папок и файлов в нужное место.
  • Почему лучше: быстрее и не требует много ручного труда.

Синтаксис mv очень прост – старый путь меняется на новый:

mv <old file path> <new file path>.

mv /Users/Yablykworld/Documents/file1 /Users/Yablykworld/Desktop/file1

Эта команда переносит file1 из папки Документы на Рабочий стол.

  • Заменяет:⌘Cmd + I (показать информацию).
  • Почему лучше: быстрее, умеет отображать информацию о нескольким файлах сразу и имеет богатую палитру настроек.

ls – невероятно мощная. команда для отображения того, что находится в ваших папках. Также она выдает информацию о том, кто имеет право видеть их, есть ли на вашем Mac скрытые файлы или папки, и многое другое.

Лучшие опции для ls:

-l – отображает права для каждого файла в папке, время последнего изменения, владельца файла и его (файла) название.

-a – показывает все файлы в папке, включая скрытые (отличный вариант для библиотеки пользователя, которая в macOS по умолчанию скрыта).

Вот как всё работает:

ls -la /System/Library

Терминал на Mac (macOS): что это, команды, синтаксис

mkdir

  • Заменяет действие:Finder → Файл → Новая папка.
  • Почему лучше: работает быстрее, и задать имя новой папочке можно сразу в командной строке (нет необходимости кликать два раза, как это имеет место быть в графическом интерфейсе).

Создает новые папки в мгновение ока.

  • Заменяет: процедуру отправки файлов в Корзину и её очистки;
  • Почему лучше: быстрее, плюс удаляются даже те файлы, от которых обычно не получается избавиться с помощью Корзины.

По умолчанию rm удаляет только файлы, папки остаются. Для того, чтобы сразу удалять и их, используйте опцию -R (рекурсивно).

С запуском macOS Каталина, помимо множества новинок и функций, Apple введены и Zsh (Z оболочка) на месте Колотить (Борн-опять оболочка). Пользователи, знакомые со скриптами Bash и интерактивными командными строками из терминал, они быстро заметили это изменение. В Терминале предлагается выполнить командную строку, чтобы сделать это переход от баш к зш.

Почему был осуществлен переход от Bash к Zsh?

Проще говоря, речь идет об ограничениях, налагаемых Лицензия на распространение (GNU) для использования Bash.
Bash находится в процессе разработки, достиг версии 5.0. Окончательная версия выпущена в начале января 2019. Тем не менее, Apple используется до MacOS Mojave (выпущен осенью 2018 года) устаревшая версия. Было предпочтительнее Баш НИЧЕГОверсия 2007. Новые версии Bash были выпущены по лицензии GNU General Public License модифицированный (GPLv3), что требует некоторых ограничения и оговорки для поставщиков программного обеспечения.

Баш против. ЗШ

Для пользователей переключение с Bash на Zsh должно быть радостью. Особенно для тех, кто часто пользуется терминалом. Zsh (Z shell) основан на том же языке, что и Bash, но он приносит интересные особенности. Интуитивно понятные командные строки, плагинВездеходы и темы графика.
Помимо команд Bash, в Zsh есть много других специальных команд, и многие из них могут быть настроены пользователем для выполнения некоторых операций. Имя.

- автоматическое завершение командных строк (автозаполнение)
- расширенные переменные
- заменить путь
- интуитивно понятное расширение пути. “/u/lo/b <TAB>” идет в "/ usr / local / bin"
- поддержка о-мой-ЗШ для расширенных возможностей
– поддержка тем в терминале
- многие другие, представленные здесь.

О-My-ЗШ это самый популярный фреймворк для Zsh, поставляемый со многими плагинВездеходы и темы включен. Простота установки, настройки и настройки.

Как установить Oh-My-Zsh для Zsh на macOS

Выполните командную строку в Терминале:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

После установки oh-my-zsh у вас щедрая библиотека плагины если темы. Кроме того, есть много параметров конфигурации и настройки в зависимости от ваших предпочтений. Все детали найти здесь.


Модуль и утилиты рекомендации: iTerm2 (эмулятор терминала, который заменит терминал), Homebrew и тема POWERLEVEL9K для Zsh (Oh-My-Zsh).

Как мы меняемся default оболочка в macOS Каталина

Если вы не удовлетворены Zsh, вы всегда можете вернуться к Bash через macOS Екатерина. Однако имейте в виду, что это элементарная версия Bash 2007 года выпуска.

Выполните командную строку в Терминале, чтобы вернуться в Bash:


Помимо Bash и Zsh вы также можете активировать другие оболочки в macOS Каталина.
Выполнить в терминале команду cat /etc/shells через которую можно увидеть снаряды, входящие в macOS Каталина.

/bin/bash
/bin/csh
/bin/dash
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

Читайте также: