С момента своего создания Bash получил широкое распространение и обычно используется в качестве оболочки входа по умолчанию для многочисленных дистрибутивов Linux . [10] Он имеет историческое значение как одна из самых ранних программ, портированных на Linux Линусом Торвальдсом , наряду с компилятором GNU ( GCC ). [11] Он доступен практически во всех современных операционных системах, что делает его универсальным инструментом в различных вычислительных средах.
Хотя Bash был разработан для UNIX и UNIX-подобных операционных систем, таких как GNU/Linux, он также доступен на Android, macOS, Windows и многих других современных и исторических операционных системах. [12] «Хотя были попытки создать специализированные оболочки, производные от Bourne shell продолжают оставаться основными используемыми оболочками». [13]
Во время работы в Массачусетском технологическом институте над операционной системой Compatible Time-Sharing System Луи Пузен написал « RUNCOM » , «своего рода оболочку, управляющую выполнением командных скриптов с заменой аргументов». Он «считал, что команды должны использоваться в качестве строительных блоков для написания большего количества команд, как библиотеки подпрограмм». [14]
«Было средство, которое могло выполнять набор команд, хранящихся в файле; оно называлось runcom«команды запуска», а файл стал называться «runcom». rcВ Unix это ископаемое использование». [15] [16]
«В комментариях подстановка параметров не производится».
Печатные и непечатные комментарии.
Использование позиционных параметров.
выполнение переменных.
1964 ( 1964 )
Разработка MULTICS началась в Массачусетском технологическом институте.
1965 ( 1965 )
2 апреля 1965 г .: Массачусетский технологический институт публикует статью Луи Пузена "The SHELL, A Global Tool for Calling and Chaining Procedures in the System" . В статье описываются многие возможности Bash. [17] ( 1965-04-02 )
« Кристофер Стрейчи , британский ученый, посетил Массачусетский технологический институт примерно в то же время, и его проект макрогенератора показался мне очень прочной основой для командного языка, в частности, методов цитирования и передачи аргументов. Не будучи приглашенным по этой теме, я написал статью, объясняющую, как можно разработать командный язык Multics с этой целью. И я придумал слово «shell» для его названия». [14]
«Она (т. е. оболочка Томпсона) была смоделирована по образцу оболочки Multics, разработанной в 1965 году американским инженером-программистом Глендой Шредер . Сама оболочка Multics Шредера была смоделирована по образцу программы RUNCOM, которую Луи Пузен показал команде Multics.
1968 ( 1968 )
Был выпущен ALGOL68. Оболочка Bourne позаимствовала из него концепции потока программы, замкнутых форм ( if...fi, case...esac) и завершения подстановок в любом месте. [18] Эти замкнутые формы и цикл for...doneand while...doneбыли определены как «защищенные команды» в 1976 году Дейкстрой. [19]
1969 ( 1969 )
Операционная система MULTICS была представлена в результате сотрудничества MIT, GE и Bell Labs. «Она также является первой, в которой командный процессор был реализован как обычный пользовательский код — идея, которая позже была использована в оболочке Unix». Multics Wikipage Она называлась exec_com или ec. [20] [21]
1971 ( 1971 )
«Кен Томпсон (из Bell Labs) разработал первую оболочку для UNIX под названием «V6 shell». Ее единственной целью было служить в качестве интерактивной оболочки. Она поддерживала внешние команды, называемые glob, для сопоставления с образцом, и if, для условных выражений. «Оболочка представила компактный синтаксис для перенаправления ( <>и >>) и конвейеризации ( |или ^), который сохранился в современных оболочках. Вы также можете найти поддержку для вызова последовательных команд (с ;) и асинхронных команд (с &).» [13] Она также включала команду goto. «Однако оболочка Томпсона все еще распространялась с системой как osh». [22]
1972 ( 1972 )
Конвейеры были введены в Unix. [18]
1973 ( 1973 )
UNIX, первоначально написанный Кеном Томпсоном, Деннисом Ритчи и Брайаном Керниганом среди прочих, был выпущен компанией AT&T (страница UNIX в Википедии).
1975 ( 1975 )
«Строительство оболочки PWB Mashey началось в середине 1975 года». [18]
Сентябрь 1975 г .: компания Digital Equipment Corporation выпустила VT52, который «обеспечивал экран с 24 строками и 80 столбцами текста и поддерживал все 95 символов ASCII, а также... двунаправленную прокрутку» и, в отличие от своего предшественника VT50, поддерживал строчные буквы ( VT52 ). ( 1975-09 )
1977 ( 1977 )
Американский национальный стандартный код для обмена информацией, или «ASCII», опубликован Национальным институтом науки и технологий, или «NIST», как FIPS PUB 1-2. [23] Набор символов ASCII по-прежнему используется нами сегодня как основной компонент написания переносимых сценариев оболочки.
"Оболочка Bourne была представлена... Созданная Стивеном Борном в AT&T Bell Labs для V7 UNIX, [она] остается полезной оболочкой и сегодня (в некоторых случаях как корневая оболочка по умолчанию)". "Bourne ввел потоки управления, циклы и переменные в скрипты, предоставив более функциональный язык для взаимодействия с операционной системой (как интерактивно, так и неинтерактивно). Оболочка также позволяла использовать скрипты оболочки в качестве фильтров, обеспечивая интегрированную поддержку обработки сигналов, но не имела возможности определять функции. Наконец, она включала ряд функций, которые мы используем сегодня, включая подстановку команд (с использованием обратных кавычек) и документы HERE для встраивания сохраненных строковых литералов в скрипт". [13] Она использовала стиль -eq, -ne, -lt тестовых операторов
Оболочка Korn была представлена примерно в то же время, что и оболочка Bourne. Она предоставляет некоторые функции, заимствованные из Python и Ruby, такие как ассоциативные массивы и арифметика с плавающей точкой, и нацелена на поддержку нового стандарта POSIX. [13] К ее функциям относятся оператор проверки -ne и синтаксис проверки `[...]`, команда "for ... in", арифметический синтаксис `$((...))`, знакомый синтаксис позиционных параметров, подстановка команд и команда псевдонима.
OpenVMS — начальный выпуск. [24] Позднее он включал Bash.
1978 ( 1978 )
C shell — начальный выпуск. Создан Биллом Джоем, когда он был в Беркли, и выпущен вместе с 2BSD. «Полезной функцией, представленной Биллом Джоем в C shell, была история команд. Эта функция поддерживала историю ранее выполненных команд и позволяла пользователю просматривать и легко выбирать предыдущие команды для выполнения. Например, ввод истории команд покажет ранее выполненные команды. Клавиши со стрелками вверх и вниз можно использовать для выбора команды, или предыдущая команда может быть выполнена с помощью !!. Также можно ссылаться на аргументы предыдущей команды; например, !* ссылается на все аргументы предыдущей команды, где !$ ссылается на последний аргумент предыдущей команды». [13] «csh, tcsh, zsh, ash и scsh выпущены под лицензией BSD или подобной BSD».
Оболочка TENEX C "ввела имя файла и завершение команды в дополнение к функциям редактирования командной строки. tcsh была разработана Кеном Гриром в Университете Карнеги-Меллона". [13] Символ shebang или hashbang был доступен в tcsh. Также, позиционные параметры как массив argv, включая argv[1], переменная оболочки $0 как argv[0], расширение параметра Count of Indices $#var, операторы -d и -x тестового синтаксиса относительно каталога и тестов исполняемости, соответственно, символ отрицания !, циклическая конструкция в команде foreach, команды set, echo и exit, назначение переменных и арифметические контексты "@ count = $count + 1" и знакомые правила двойных кавычек.
Novell NetWare - Первоначальный выпуск. В какой-то момент он включал Bash.
1984 ( 1984 )
«Работа IEEE POSIX началась в 1984 году как результат работы, начатой в организации /usr/group с целью создания стандарта для двух версий UNIX того времени — версии 6 и BSD (Беркли)». [25]
1986 ( 1986 )
Документы, которые стали известны как "POSIX", изначально были стандартом пробного использования IEEE. Некоторые считают его фактическим стандартом. [26]
1988 ( 1988 )
10 января 1988 г .: Брайан Фокс начал писать код для Bash [27] после того, как Ричард Столлман был недоволен отсутствием прогресса, достигнутым предыдущим разработчиком. [28] Столлман и FSF посчитали свободную оболочку, которая могла бы запускать существующие скрипты оболочки, настолько стратегически важной для полностью свободной системы, построенной из кода BSD и GNU, что это был один из немногих проектов, которые они финансировали сами. Фокс взялся за эту работу как сотрудник FSF. [28] [29] ( 1988-01-10 )
«Первая версия IEEE Std 1003 была опубликована в 1988 году под названием «IEEE IX», но эти стандарты не определяли требования к «командному интерпретатору» или «оболочке и утилитам» до недавнего времени. «По предложению Ричарда Столлмана это было изменено на POSIX для «переносимого интерфейса операционной системы». [25] [30] Интерфейс POSIX «позволяет разработчикам приложений писать переносимые приложения — он был разработан с этой целью». [31]
1989 ( 1989 )
30 мая 1989 г .: Ясеневая оболочка Кеннета Алмквиста — Первоначальный выпуск. [32] ( 1989-05-30 )
8 июня 1989 г .: Fox выпустила Bash в качестве бета-версии, версии 0.99. [8] Лицензия была GPL-1.0 или более поздней. «В дополнение к поддержке обратной совместимости для написания скриптов, Bash включил в себя функции из оболочек Korn и C. Вы найдете историю команд, редактирование командной строки, стек каталогов (pushd и popd), множество полезных переменных окружения, завершение команд и многое другое». [13] В конечном итоге он поддерживал «регулярные выражения (похожие на Perl) и ассоциативные массивы». ( 1989-06-08 )
Microsoft/IBM DOS через проект DJGPP — Первоначальный выпуск.
1992 ( 1992 )
Опубликован POSIX.2: Shell and Utilities (IEEE Std 1003.2-1992).
Брайан Фокс оставался основным разработчиком до середины 1992 [33] и середины 1994 года. [34] [35] Затем его обязанности перешли к другому раннему участнику, Чету Рэми. [36] С тех пор Bash стал самой популярной интерактивной оболочкой по умолчанию среди основных дистрибутивов GNU/Linux, таких как Fedora , Debian и openSUSE , а также среди их производных и конкурентов. [37] [38]
1992 ( 1992 )
«Первые восемь записей в (POSIX) Portable Character Set определены в стандарте ISO/IEC 6429:1992». Это null, alert, backspace, tab, cart-return, newline, vertical-tab и form-feed. [39]
1994 ( 1994 )
26 января 1994 г .: Debian — первый релиз. Bash — интерактивная и неинтерактивная оболочка по умолчанию. [40] (1994-01-26)
Группа комитетов по стандартам из IEEE, Open Group и ISO/IEC начала работу над Single UNIX Specification v 3; вместе они стали известны как Austin Group. Технический стандарт для Shell и Utilities был создан в The Open Group Base Specifications, Issue 6, который сам по себе является частью Single UNIX Specification v 3. [43] Основное внимание в их работе было сосредоточено на том, чтобы «собрать в один документ» практики, которые, как было доказано, работают в промышленности и академических кругах, при этом внеся «минимальные изменения в существующий код приложения». [31]
1999 (1999)
19 февраля 1999 г .: Выпущен Bash 2.03. (1999-02-19)
2000 (2000)
21 марта 2000 г .: Выпущен Bash 2.04. (2000-03-21)
Оболочка Korn распространяется с открытым исходным кодом под лицензией Common Public License.
«Остальные символы» в наборе переносимых символов POSIX «определены в стандарте ISO/IEC 10646-1:2000». Они включают в себя оставшиеся символы на клавиатуре США QWERTY от <пробел> до <тильды>. [39]
BeOS - Финальный релиз
Darwin OS - Первоначальный выпуск. Bash - одна из доступных оболочек. [13]
14 сентября 2000 г .: Существует список рассылки Bug-bash. [44] (2000-09-14)
2001 (2001)
9 апреля 2001 г .: выпущен Bash 2.05. [45] (2001-04-09)
Опубликован стандарт POSIX-2001, включающий раздел «Команды и утилиты». В этом участвуют Austin Group и Single Unix Specification. [43]
2002 (2002)
Сентябрь 2002 г .: В Debian версия 0.4.1 ash была переименована в dash. (2002-09)
2003 (2003)
Bash стал оболочкой по умолчанию в операционных системах Apple (например, MacOS), начиная с OS X 10.3 Panther. [46] [47] Он также был доступен в OS X 10.2 Jaguar, где оболочкой по умолчанию была tcsh.
Стандарт оболочки и утилит POSIX-2003 опубликован IEEE. «Это стандарт компонента продукта для обязательной оболочки и утилит, связанных с функциональностью»; существует программа сертификации POSIX. [48]
2004 (2004)
27 июля 2004 г .: Выпущен Bash 3.0. [49] (2004-07-27)
Опубликован POSIX-2004. [50]
2005 (2005)
9 декабря 2005 г .: Выпущен Bash 3.1. [51] (2005-12-09)
12 октября 2006 г .: выпущен Bash 3.2. [52] Лицензия — GPL-2.0 или более поздняя. (2006-10-12)
Ubuntu использует Dash в качестве оболочки по умолчанию.
2008 (2008)
IEEE выпускает POSIX-2008. «Этот стандарт определяет стандартный интерфейс исходного уровня для оболочки и служебных функций, требуемых прикладными программами, включая скрипты оболочки». [48]
2009 (2009)
20 февраля 2009 г .: Выпущен Bash 4.0. [53] Лицензия — GPL-3.0 или более поздняя. (2009-02-20)
Novell Netware - финальная версия
14 сентября 2009 г .: Haiku (операционная система) — первый выпуск. [54] «Интерфейс оболочки Haiku по умолчанию» — bash. [55] По состоянию на 13 сентября 2024 г. Haiku остаётся в стадии бета-тестирования. [56] (2009-09-14)
2011 (2011)
2 января 2010 г .: Выпущен Bash 4.1. [57] (2010-01-02)
6 февраля 2011 г .: Выпущен Debian Lenny с Bash в качестве интерактивной оболочки по умолчанию и dash в качестве неинтерактивной оболочки по умолчанию. [40] «Dash не имеет многих функций, которые можно было бы ожидать от интерактивной оболочки, что позволяет ему работать быстрее и эффективнее использовать память, чем Bash». (2011-02-06)
14 февраля 2011 г .: Выпущен Bash 4.2. [58] (2011-02-14)
2012 (2012)
В Solaris 11 «пользовательской оболочкой по умолчанию является оболочка Bourne-again (bash)» [59] .
2013 (2013)
POSIX-2013 выпущен IEEE. [60]
2014 (2014)
27 февраля 2014 г .: Выпущен Bash 4.3. [61] (2014-02-27)
Termux и другие приложения эмуляции терминала обеспечивают доступность Bash на Android .
2016 (2016)
26 апреля 2016 г .: Windows 10 Insider Preview Build 14332 поддерживает установку Bash на Ubuntu в недавно выпущенной подсистеме Windows для Linux . [64] [65] (2016-04-26)
POSIX-2016 выпущен IEEE. [66]
15 сентября 2016 г .: Выпущен Bash 4.4. (2016-09-15)
2017 (2017)
Выпущена новая версия стандарта POSIX. [48]
Некоторые другие современные операционные системы, поддерживающие Bash, включают и ArcaOS . [67]
2018 (2018)
31 января 2018 г .: IEEE опубликовал стандарт POSIX 2017. [68] (2018-01-31)
Apple упаковывала Bash в качестве своей интерактивной оболочки по умолчанию вплоть до macOS Mojave (около 2018 г.). Однако по явным причинам лицензирования с Catalina [69] (около 2019 г.) Apple заменила свою оболочку по умолчанию, Bash версии 3.2 (около 2006 г.), на Z Shell версии 5.7 (около 2019 г.). [70] [71] «Двоичный файл bash, поставляемый с macOS, уже долгое время застрял на версии 3.2. bash v4 был выпущен в 2009 г., а bash v5 — в январе 2019 г. Причина, по которой Apple не перешла на эти новые версии, заключается в том, что они лицензированы с помощью GPL v3. bash v3 по-прежнему имеет лицензию GPL v2». [69] Zsh использует более разрешительную лицензию. [72]
2019 (2019)
7 января 2019 г .: Выпущен Bash 5.0. [73] (2019-01-07)
2020 (2020)
С выпуском 2020.4 Kali Linux перешел на zsh в качестве оболочки по умолчанию для образов рабочего стола, но образы ARM, контейнеров, NetHunter и WSL по-прежнему используют Bash. [74]
7 декабря 2020 г .: Выпущен Bash 5.1. [75] (2020-12-07)
2022 (2022)
26 сентября 2022 г .: Выпущен Bash 5.2. [76] (2022-09-26)
«На данный момент, в 2022 году, значительное количество совместимых с POSIX или находящихся под его влиянием систем существует на серверах, в облачных вычислительных центрах, высокопроизводительных компьютерах, системах Apple (первоначально вариациях BSD) и во многих системах сотовой связи. Количество устройств измеряется миллиардами». [25]
14 июня 2024 г .: IEEE публикует стандарт POSIX-2024. (2024-06-14)
Функции
Список кратких описаний
This article is in list format but may read better as prose. You can help by converting this article, if appropriate. Editing help is available.(January 2025)
Как командный процессор , Bash работает в текстовом окне , где пользователи вводят команды для выполнения различных задач. Он также поддерживает выполнение команд из файлов, известных как скрипты оболочки , облегчая автоматизацию . В соответствии с соглашениями оболочки Unix , Bash включает в себя богатый набор функций, включая:
Руководство пользователя, предоставленное проектом GNU, также доступно по адресу info bash, а техническое руководство доступно по адресу man bash.
Арифметика с плавающей точкой недоступна из самой оболочки (для получения информации об этой функциональности см. текущие версии bcи awk, среди прочих),
(Хотя их можно использовать совместно, использование скобок в сопоставлении с образцом [...], и использование скобок в командах тестирования, [и [[ ... ]], — это разные вещи.)
Отдельные программы в стиле UNIX , такие как lsили ln, и
Скрипты оболочки , представляющие собой файлы, содержащие исполняемые команды. (Скрипты оболочки не требуют компиляции перед выполнением и, при соблюдении определенных требований, могут вызываться как команды, используя имя файла.)
Полученная строка выполняется как команда.
Bash также предлагает...
Настраиваемые среды выполнения: [79]
Файлы запуска оболочки и сеанса,~/.bashrc такие как и ~/.profile(т. е. dotfiles );
Настройки ( setвстроенные ) и параметры оболочки ( shoptвстроенные ), которые изменяют поведение оболочки;
Информационная страница , которая аналогична руководству GNU;
Неформальные пути поддержки через:
IRC на libera.chat #bash
Списки рассылки по адресу https://www.gnu.org/software/bash/
Общее обсуждение
Синтаксис команд Bash является надмножеством синтаксиса команд оболочки Bourne. Bash поддерживает раскрытие фигурных скобок , [80] завершение командной строки (программируемое завершение), [81] базовую отладку [82] [83] и обработку сигналов (используя trap) начиная с bash 2.05a [84] [85] среди других функций. Bash может выполнять подавляющее большинство сценариев оболочки Bourne без изменений, за исключением сценариев оболочки Bourne, которые сталкиваются с поведением синтаксиса fringe, интерпретируемым по-разному в Bash, или пытаются запустить системную команду, соответствующую более новой встроенной команде Bash, и т. д. Синтаксис команд Bash включает идеи, взятые из оболочки Korn (ksh) и оболочки C (csh), такие как редактирование командной строки, история команд ( historycommand), [86] стек каталогов, переменные $RANDOMи и синтаксис подстановки команд$PPID POSIX .$(...)
Когда пользователь нажимает клавишу Tab в интерактивной командной оболочке, Bash автоматически использует автодополнение командной строки , начиная с бета-версии 2.04, [87] для сопоставления частично набранных имен программ, имен файлов и имен переменных. Система автодополнения командной строки Bash очень гибкая и настраиваемая, и часто поставляется с функциями, которые дополняют аргументы и имена файлов для определенных программ и задач.
Синтаксис Bash имеет много расширений, которых нет в оболочке Bourne. Bash может выполнять целочисленные вычисления («арифметическая оценка»), не порождая внешние процессы. Для этой цели он использует синтаксис ((...))command и variable. Его синтаксис упрощает перенаправление ввода-вывода . Например, он может перенаправлять стандартный вывод (stdout) и стандартную ошибку (stderr) одновременно с помощью оператора . Это проще вводить, чем эквивалент оболочки Bourne ' '. Bash поддерживает подстановку процессов с помощью синтаксиса and , который заменяет вывод (или ввод) команды, где обычно используется имя файла. (Это реализовано через неименованные каналы /proc/fd/ в системах, которые это поддерживают, или через временные именованные каналы , где это необходимо).$((...))&>command > file 2>&1<(command)>(command)
При использовании ключевого слова «function» объявления функций Bash несовместимы со скриптами Bourne/Korn/POSIX (KornShell имеет ту же проблему при использовании «function»), но Bash принимает тот же синтаксис объявления функций, что и оболочки Bourne и Korn, и соответствует POSIX. Из-за этих и других различий скрипты оболочки Bash редко запускаются под интерпретаторами оболочек Bourne или Korn, если только они специально не написаны с учетом этой совместимости, что становится все менее распространенным по мере того, как Linux становится все более распространенным. Но в режиме POSIX Bash более точно соответствует POSIX. [88]
Bash поддерживает here documents . Начиная с версии 2.05b Bash может перенаправлять стандартный ввод (stdin) из "here string" с помощью <<<оператора .
Bash 3.0 поддерживает внутрипроцессное сопоставление регулярных выражений , используя синтаксис, напоминающий Perl . [89]
В феврале 2009 года [90] Bash 4.0 представил поддержку ассоциативных массивов . [4] Индексы ассоциативных массивов представляют собой строки, подобно AWK или Tcl . [91] Их можно использовать для эмуляции многомерных массивов. Bash 4 также меняет свою лицензию на GPL-3.0-или-более позднюю . [92]
Структуры управления
Bash предоставляет разделители команд "условного выполнения", которые делают выполнение команды зависимым от кода выхода, установленного предшествующей командой. Например:
Where ./do_somethingвыполняется только в том случае, если cdкоманда (изменить каталог) была «успешной» (вернула нулевой код завершения), и echoкоманда будет выполнена только в том случае, если либо команда cd, либо ./do_somethingкоманда вернет «ошибку» (ненулевой код завершения).
Для всех команд статус выхода сохраняется в специальной переменной $?. Bash также поддерживает и формы условной оценки команд.if...;then...;else...;ficase$VARIABLEin$pattern)...;;$other_pattern)...;;esac
Управление процессами (также известное как «контроль заданий»)
Оболочка Bash имеет два режима выполнения команд: пакетный (асинхронный) и параллельный (синхронный).
Для выполнения команд в пакетном режиме (т.е. последовательно) они должны быть разделены символом «;» или на отдельных строках:
команда1 ; команда2команда3
В этом примере после завершения команды 1 выполняется команда 2, а после завершения команды 2 выполняется команда 3.
Фоновое выполнение команды command1 может быть выполнено с использованием (символа &) в конце команды выполнения, и процесс будет выполнен в фоновом режиме, при этом управление немедленно вернется в оболочку и будет разрешено продолжить выполнение команд.
команда1 &
Или для одновременного выполнения command1 и command2, их необходимо выполнить в оболочке Bash следующим образом:
команда1 и команда2
В этом случае команда 1 выполняется в фоновом режиме и символе, немедленно возвращая управление оболочке, которая выполняет команду 2 в активном режиме.
Процесс можно остановить и вернуть управление bash, набрав Ctrl+ z, пока процесс выполняется на переднем плане. [93]
Список всех процессов, как работающих в фоновом режиме, так и остановленных, можно получить, выполнив команду jobs:
$ jobs [1]- Выполнение команды1 и [2]+ Остановленная команда2
В выводе число в скобках относится к идентификатору задания. Знак «плюс» обозначает процесс по умолчанию для bgи fg. Тексты «Running» и «Stopped» относятся к состоянию процесса . Последняя строка — это команда, которая запустила процесс.
Состояние процесса можно изменить с помощью различных команд. fgКоманда выводит процесс на передний план, а bgостановленный процесс запускает в фоновом режиме. bgи fgможет принимать идентификатор задания в качестве первого аргумента, чтобы указать процесс, над которым нужно работать. Без него они используют процесс по умолчанию, обозначенный знаком плюс в выводе jobs. killКоманду можно использовать для преждевременного завершения процесса, отправив ему сигнал . Идентификатор задания должен быть указан после знака процента:
убить %1
Переносимость с POSIX
Вызов Bash с --posixопцией или указанием set -o posixв скрипте приводит Bash к очень близкому соответствию стандарту POSIX 1003.2 . [94] Скрипты оболочки Bash, предназначенные для переносимости, должны учитывать по крайней мере стандарт оболочки POSIX. Некоторые функции bash, не найденные в POSIX: [94] [95]
Некоторые расширенные параметры вызова
Расширение скобок
Массивы и ассоциативные массивы
Расширенная тестовая конструкция с двойными скобками [[...]]и ее соответствие регулярному выражению
Конструкция арифметической оценки с двойными скобками (только (( ... )); $(( ... ))— это POSIX)
Некоторые операции по обработке строк при расширении параметров
localдля переменных с ограниченной областью действия
Если фрагмент кода использует такую функцию, это называется «башизмом» — проблемой для переносимого использования. Debian checkbashismsи Vidar Holen shellcheckмогут быть использованы для того, чтобы убедиться, что скрипт не содержит этих частей. [97] [98] Список варьируется в зависимости от фактической целевой оболочки: политика Debian допускает некоторые расширения в своих скриптах (как в оболочке dash ), [95] в то время как скрипт, предназначенный для поддержки оболочек Bourne до POSIX, таких как autoconf , еще configureболее ограничен в функциях, которые он может использовать. [99]
Расширение скобы
Расширение скобок, также называемое чередованием, — это функция, скопированная из оболочки C. Она генерирует набор альтернативных комбинаций. Сгенерированные результаты не обязательно должны существовать в виде файлов. Результаты каждой развернутой строки не сортируются, и сохраняется порядок слева направо:
$ echo a { p,c,d,b } e ape ace ade abe $ echo { a,b,c }{ d,e,f } ad ae af bd be bf cd ce cf
Пользователи не должны использовать фигурные скобки в переносимых скриптах оболочки, поскольку оболочка Bourne не выдает тот же вывод.
$ # оболочка bash $ /bin/bash -c 'echo a{p,c,d,b}e' ape ace ade abe $ # Традиционная оболочка не выдает тот же вывод $ /bin/sh -c 'echo a{p,c,d,b}e' a{p,c,d,b}e
Когда расширение скобок сочетается с подстановочными знаками, сначала раскрываются скобки, а затем полученные подстановочные знаки подставляются обычным образом. Таким образом, список изображений JPEG и PNG в текущем каталоге можно получить с помощью:
ls *. { jpg, jpeg, png } # расширяется до *.jpg *.jpeg *.png - после чего, # обрабатываются подстановочные знаки echo *. { png, jp { e, } g } # echo просто показывает расширения - # и фигурные скобки в фигурных скобках возможны.
В дополнение к чередованию, расширение скобок может использоваться для последовательных диапазонов между двумя целыми числами или символами, разделенными двойными точками. Более новые версии Bash позволяют использовать третье целое число для указания приращения.
Когда раскрытие фигурных скобок сочетается с раскрытием переменной (также известное как раскрытие параметра и подстановка параметра ), раскрытие переменной выполняется после раскрытия фигурных скобок, что в некоторых случаях может потребовать использования evalвстроенной функции, например:
$ start = 1 ; end = 10 $ echo { $start .. $end } # не удается расширить из-за порядка оценки {1..10} $ eval echo { $start .. $end } # происходит расширение переменной, затем оценивается результирующая строка 1 2 3 4 5 6 7 8 9 10
Настраиваемая среда(ы) выполнения
Файлы запуска оболочки и сеанса (также известные как «файлы точек»)
This section contains instructions, advice, or how-to content. Please help rewrite the content so that it is more encyclopedic or move it to Wikiversity, Wikibooks, or Wikivoyage.(January 2019)
При запуске Bash выполняет команды из множества dot-файлов . [100] В отличие от сценариев оболочки Bash, dot-файлы обычно не имеют ни разрешений на выполнение, ни директивы интерпретатора, например #!/bin/bash.
Пример запуска Bash, совместимый с устаревшим вариантом
Приведенный ниже пример ~/.bash_profileсовместим с оболочкой Bourne и дает семантику, похожую на csh для ~/.bashrcи ~/.bash_login. Это сокращенная оценка , которая проверяет, существует ли имя файла и является ли оно читаемым, пропуская часть после , если это не так.[ -r filename ] && cmd&&
[ -r ~/.profile ] && . ~/.profile # настройка среды, один раз, только синтаксис Bourne-sh если [ -n " $PS1 " ] ; тогда # мы интерактивны? [ -r ~/.bashrc ] && . ~/.bashrc # настройка tty/prompt/function для интерактивных оболочек [ -r ~/.bash_login ] && . ~/.bash_login # любые задачи при входе в систему только для оболочки входа fi # Конец блока "if"
Проблемы операционной системы при запуске Bash
Некоторые версии Unix и Linux содержат системные скрипты запуска Bash, обычно в /etcкаталоге . Bash выполняет эти файлы как часть своей стандартной инициализации, но другие файлы запуска могут считывать их в порядке, отличном от задокументированной последовательности запуска Bash. Содержимое файлов пользователя root по умолчанию также может иметь проблемы, как и файлы скелета, которые система предоставляет новым учетным записям пользователей при настройке. Скрипты запуска, которые запускают систему X Window, также могут делать удивительные вещи с пользовательскими скриптами запуска Bash в попытке настроить переменные среды пользователя перед запуском оконного менеджера . Эти проблемы часто можно решить с помощью файла ~/.xsessionили ~/.xprofileдля чтения ~/.profile— который предоставляет переменные среды, необходимые окнам оболочки Bash, порожденным оконным менеджером, таким как xterm или Gnome Terminal .
Настройки и параметры оболочки
Встроенныйset
Xtrace: [ set -x| set -o xtrace]
Основное средство отладки оболочки. И xtrace, и verbose можно отключить одновременно с помощью команды set -.
Подробный: [ set -v| set -o verbose]
Выводит команду на терминал по мере того, как Bash ее читает. Bash читает конструкции все сразу, например, составные команды, включающие блоки if-fi и case-esac. Если a set -vвключено в составную команду, то "verbose" будет включен в следующий раз, когда Bash будет читать код как входные данные, т. е. после завершения текущей выполняемой конструкции. [101] И xtrace, и verbose можно отключить одновременно с помощью команды set -.
Встроенныйshopt
расширить-псевдонимы
По умолчанию в интерактивных оболочках. Некоторые разработчики не рекомендуют использовать его в скриптах.
Программируемое завершение
Bash поддерживает программируемое завершение с помощью встроенных команд complete, compoptи compgen. [102] Эта функция доступна с момента выхода бета-версии 2.04 в 2000 году. [103] [104] Эти команды позволяют реализовать сложную и интеллектуальную спецификацию завершения для команд (т. е. установленных программ), функций, переменных и имен файлов. [105]
Команды completeи compoptдве определяют, как аргументы некоторых доступных команд или опций будут перечислены во входных данных readline . Начиная с версии 5.1 завершение команды или опции обычно активируется нажатием клавиши после ввода ее имени. [105]Tab ↹
Сочетания клавиш в Readline
Bash использует GNU Readline для предоставления сочетаний клавиш для редактирования командной строки с использованием сочетаний клавиш по умолчанию ( Emacs ). Vi-связывания можно включить, запустив set -o vi. [106]
Документация
В качестве стандарта, на котором основана bash, особенно информативен стандарт POSIX или IEEE Std 1003.1, [107] и последующие.
Linux "man page" [108] [109] призван быть авторитетным пояснительным техническим документом для понимания того, как bashработает. Обычно он доступен при запуске man bash.
Руководство GNU иногда считается более удобным для чтения. "Вы также можете найти информацию о Bash, запустив info bash... или просмотрев /usr/share/doc/bash/, /usr/local/share/doc/bash/, или аналогичные каталоги в вашей системе. Краткую сводку можно получить, запустив bash --help. [110]
«Если пользователь вызывает RUNCOM без каких-либо аргументов, он выводит некоторые инструкции по его использованию и останавливается, возвращая пользователя в командную строку супервизора (системы). ( RUNCOM )»
В современных Linux-системах информацию о встроенных командах оболочки можно найти, выполнив help, help [built-in name]или man builtinsв командной строке терминала, где установлен bash. Некоторые команды, такие как echo, false, kill, или , в зависимости от вашей системы и локально установленной версии bash, могут ссылаться либо на встроенный файл оболочки, либо на системный двоичный исполняемый файл. Когда происходит одно из этих конфликтов имен команд, bash по умолчанию выполнит заданную командную строку, используя встроенный файл оболочки. Указание абсолютного пути к двоичному исполняемому файлу (т. е. ) является одним из способов обеспечения того, чтобы оболочка использовала системный двоичный файл. Эта проблема конфликта имен также влияет на любые «справочные сводки», просматриваемые с помощью и . Встроенные файлы оболочки и системные двоичные исполняемые файлы с одинаковым именем часто имеют разные параметры.printftesttrue/bin/printfkill --help/bin/kill --help
«У сопровождающего проекта также есть страница Bash, которая включает в себя часто задаваемые вопросы», [111] [110] этот FAQ актуален для версии bash 5.1 и больше не обновляется.
Безопасность и уязвимости
Корневые скрипты
Запуск любых скриптов оболочки от имени пользователя root в течение многих лет широко критиковался как плохая практика безопасности. Одной из часто упоминаемых причин является то, что при запуске скрипта от имени пользователя root негативные последствия любых ошибок в скрипте будут усилены повышенными привилегиями пользователя root.
Один распространенный пример: скрипт содержит команду rm -rf ${dir}/, но переменная $dirостается неопределенной. В Linux, если скрипт был выполнен обычным пользователем, оболочка попытается выполнить команду rm -rf /как обычный пользователь, и команда не будет выполнена. Однако, если скрипт был выполнен пользователем root, то команда, скорее всего, будет выполнена успешно, и файловая система будет стерта.
Вместо этого рекомендуется использовать его sudoдля каждой команды.
Отладка
Возможности Bash, которые могут быть полезны при отладке.
Особенность
POSIX 2024
Описание
Bash-версия.
Тип грамматики
Официальное название
Синтаксис
Расширение параметров
Указать ноль или неустановлено
"${parameter:?[word]}"
Да
«Где расширение [слова], возможно, сообщение об ошибке или номер строки, записывается в STDERR, и оболочка завершается с ненулевым кодом выхода».
?
Специальные параметры
Статус выхода
"$?"
Да
«Расширяется до кратчайшего представления десятичного статуса выхода».
?
Специальные параметры
PID вызванной оболочки
"$$"
Да
«Расширяется до кратчайшего представления десятичного идентификатора процесса вызванной оболочки».
?
Специальная встроенная утилита
набор :: xtrace
set-x
Да
Основное средство отладки оболочки . Она «записывает в стандартный поток ошибок трассировку для каждой команды после ее раскрытия и перед ее выполнением».
?
Специальная встроенная утилита
набор :: подробный
set-v
Да
«Записывает вводимые данные в стандартный поток ошибок по мере их чтения».
?
Специальная встроенная утилита
набор :: pipefail
set-opipefail
Да
«Выведите статус завершения конвейера из статусов завершения всех команд в конвейере, а не только последней (самой правой) команды».
?
Специальная встроенная утилита
набор :: набор существительных
set-u
Да
При включении приведет к выходу оболочки с сообщением об ошибке при обнаружении неустановленного расширения переменной. Его использование имеет ряд контринтуитивных ловушек.
?
Специальная встроенная утилита
установить :: errexit
set-e
Да
ErrExit — это параметр, который при включении при определенных, очень специфических условиях заставит оболочку завершить работу без сообщения об ошибке, когда оболочка получает ненулевой код выхода. Его использование несколько спорно, в той степени, в которой любая малоизвестная компьютерная программа может считаться спорной. Сторонники утверждают, что ErrExit обеспечивает гарантию проверяемости в ситуациях, когда скрипты оболочки «не должны давать сбой». Однако противники утверждают, что его использование ненадежно, обманчиво просто, крайне нелогично, изобилует подводными камнями и подводными камнями и, по сути, является «театром безопасности». Многочисленные разработчики Bash настоятельно не одобряют использование этого конкретного параметра.
?
Специальная встроенная утилита
ловушка :: ВЫХОД
trap'[arg]'EXIT
Да
«Если [sigspec] (спецификатор сигнала) равен 0 или EXIT, [arg] выполняется при выходе из оболочки». Если [arg] содержит расширения, то [arg] следует заключить в одинарные кавычки.
?
Утилита
printf
printf'<%s>\n'"${var}"
Да
Средство надежной печати содержимого переменной.
?
Переменные Bash
БАШПИД
"${BASHPID}"
Нет
«Расширяется до идентификатора текущего процесса bash». [112]
?
Переменные Bash
BASH_ARGC
"${BASH_ARGC[@]}"
Нет
«Переменная массива, значения которой представляют собой количество параметров в каждом кадре текущего стека вызовов выполнения bash». [113]
?
Переменные Bash
BASH_ARGV
"${BASH_ARGV[@]}"
Нет
«Переменная массива, содержащая все параметры в текущем стеке вызовов выполнения bash». [114]
?
Переменные Bash
BASH_LINENO
"${BASH_LINENO[@]}"
Нет
«Переменная массива, элементы которой являются номерами строк в исходных файлах, где был вызван каждый соответствующий элемент FUNCNAME». [115]
?
Переменные Bash
BASH_REMATCH
"${BASH_REMATCH[@]}"
Нет
«Переменная массива, элементы которой назначаются бинарным оператором =~ условной команде [[». [116]
?
Переменные Bash
BASH_ИСТОЧНИК
"${BASH_SOURCE}"
Нет
«Переменная массива, элементы которой являются именами исходных файлов, в которых определены соответствующие имена функций оболочки в переменной массива FUNCNAME». [117]
?
Переменные Bash
BASH_XTRACEFD
"${BASH_XTRACEFD}"
Нет
«Если задано целое число, соответствующее допустимому файловому дескриптору, Bash запишет вывод трассировки, сгенерированный при включении 'set -x', в этот файловый дескриптор». [118]
?
Переменные Bash
EPOCHREALTIME
"${EPOCHREALTIME}"
Нет
«Каждый раз, когда к этому параметру обращаются, он расширяется до количества секунд с начала эпохи Unix (см. time(3)) как значение с плавающей точкой с точностью до микросекунды». [119]
?
Переменные Bash
ИМЯ ФУНКЦИИ
"${FUNCNAME[@]}"
Нет
«Переменная массива, содержащая имена всех функций оболочки, находящихся в данный момент в стеке вызовов выполнения». [120]
?
Переменные Bash
ЛИНЕНО
"${LINENO}"
Нет
«Каждый раз, когда ссылаются на этот параметр, оболочка подставляет десятичное число, представляющее текущий последовательный номер строки (начиная с 1) в скрипте или функции». [121]
?
Переменные Bash
ТРУБОПРОВОД
"${PIPESTATUS[@]}"
Нет
«Переменная массива, содержащая список значений статуса выхода из процессов в последнем выполненном приоритетном конвейере (который может содержать только одну команду)». [122]
?
Переменные Bash
ППИД
"${PPID}"
Нет
«Идентификатор процесса родителя оболочки». [123]
?
Переменные Bash
ПС4
"${PS4}"
Нет
«Значение этого параметра расширяется, как и в случае с PS1, и значение выводится перед каждой командой, которую bash отображает во время трассировки выполнения». [124]
?
Встроенная оболочка
установить :: ограничено
set-r
Нет
Ограниченный режим предназначен для повышения безопасности отдельного экземпляра оболочки от злонамеренного человека с физическим доступом к машине. Поскольку модели угроз изменились, он стал использоваться реже, чем раньше.
?
Встроенная оболочка
shopt :: extdebug
shopt-sextdebug
Нет
«Поведение, предназначенное для использования отладчиками».
?
Встроенная оболочка
ловушка :: ОТЛАДКА
trap'[arg]'DEBUG
Нет
«Если sigspec имеет значение DEBUG, команда arg выполняется перед» определенными видами команд.
?
Встроенная оболочка
ловушка :: ERR
trap'[arg]'ERR
Нет
«Если sigspec равен ERR, команда arg выполняется всякий раз, когда...» определенные виды команд «возвращают ненулевой статус выхода», при этом действуют такие же ограничения, как и для ErrExit.
?
Встроенная оболочка
ловушка :: ВОЗВРАТ
trap'[arg]'RETURN
Нет
«Если sigspec равен RETURN, команда arg выполняется каждый раз, когда завершается выполнение функции оболочки или скрипта, запущенного с помощью встроенных функций . или source».
Утилита printf: средство надежной печати содержимого переменной:
Возможности Bash, не определенные POSIX:
Переменные Bash: [131] [132]
Встроенная оболочка set: [128] [129]
Встроенная оболочка shopt: [133] [129]
Встроенные функции оболочки : [130] [129] Хотя POSIX определяет некоторые варианты использования встроенных функций, следующие спецификации сигналов являются расширениями Bash.trap[-lp][arg][sigspec…]trap
Утилиты отладки сторонних разработчиков:
ShellCheck: Инструмент анализа скриптов оболочки; [134] [98]
devscripts-checkbashisms: Проверка того, содержит ли скрипт /bin/sh какие-либо общие конструкции, специфичные для bash; [135] [97]
kcov: Инструмент покрытия кода без специальных опций компиляции; [136]
Bashdb: символьный отладчик Bash. [137] [138]
Примеры
При :?расширении параметров неустановленная или нулевая переменная может остановить выполнение скрипта.
бывш.ш
#!/bin/bash bar = " foo не определен" echo " ${ foo : ? $bar } " echo это сообщение не печатается
$ ./ex.sh ./ex.sh: строка 3: foo: foo не определен
Надежная печать содержимого массива, содержащего пробелы и символы новой строки, сначала в переносимом синтаксисе, а затем то же самое в Bash. Обратите внимание, что в Bash количество пробелов перед символом новой строки указано явно.
$ # В оболочке POSIX: $ array =( "a " " b" " > c " ) $ printf ',%s,\n' " ${ array [@] } " ,a , , b, , c ,
# В Bash: объявить -p массив объявить -a массив =([ 0 ]= "a " [ 1 ]= " b" [ 2 ]= $' \nc ' )
Печать сообщения об ошибке при возникновении проблемы.
ошибка.sh
если ! lsblk | grep sdb then echo Ошибка, строка $LINENO fi
$ ./error.sh Ошибка, строка 130
Используя xtrace . Если бы errexit был включен, то он бы не был выполнен.echoquux
тест.ш
#!/bin/bash set -x foo = bar ; echo $foo false echo quux
$ ./test.sh + foo=bar + echo bar bar + false + echo quux quux
Устаревший синтаксис
Подстановка команд в стиле обратных кавычек: `...`устарела в пользу $(...);
Использование -a или -o в командах test/ [/ ,[[
например, [ -r ./file -a ! -l ./file ]устарело в пользу [ -r ./file ] && ! [ -l ./file ];
Использование арифметического синтаксиса $[...]устарело в пользу $((...))или ((...)), в зависимости от ситуации;
Использование ^в качестве конвейера устарело в пользу |;
Любое использование exprили let.
Контузия
В сентябре 2014 года в программе была обнаружена уязвимость безопасности [139] . Она получила название « Shellshock ». Публичное раскрытие информации быстро привело к ряду атак по всему Интернету . [140] [141] [142]
Эксплуатация уязвимости может привести к выполнению произвольного кода в скриптах CGI , исполняемых определенными версиями Bash. Ошибка заключалась в том, как Bash передавал определения функций подоболочкам через переменные окружения . [143] Ошибка присутствовала в исходном коде с августа 1989 года (версия 1.03) [144] и была исправлена в сентябре 2014 года (версия 4.3).
Патчи для исправления ошибок были доступны вскоре после их обнаружения. Настоятельно рекомендуется обновиться до текущей версии.
Ему были присвоены идентификаторы Common Vulnerability CVE- 2014-6271, CVE-2014-6277 и CVE-2014-7169, среди прочих. Согласно метрикам CVSS 2.x и 3.x, ошибка считается «высокой» и «критической» соответственно.
Сообщение об ошибке
Внешняя команда bashbug сообщает об ошибках оболочки Bash. При вызове команды открывается редактор пользователя по умолчанию с формой для заполнения. Форма отправляется по почте разработчикам Bash (или, по желанию, на другие адреса электронной почты). [145] [146]
Пузен, Луи (2 апреля 1965 г.). «SHELL: глобальный инструмент для вызова и сцепления процедур в системе» (PDF) . mit.edu . MIT . Получено 5 января 2024 г. .
«Эволюция оболочек в Linux». ibm.com . Получено 19 мая 2024 г. .
«Справочник по написанию сценариев :: Написание сценариев с помощью оболочки Bourne-Again (Bash)». berkeley.edu . Получено 19 мая 2024 г. .
"IRIS :: Учебные и исследовательские информационные системы :: FAQ: Unix :: Об оболочках UNIX". berkeley.edu . Получено 19 мая 2024 г.
"Изучение оболочки Bash, 2e" . Получено 14 января 2025 г. В этой книге описывается последняя версия bash 2.0 (версия 2.01, датированная июнем 1997 г.).
"Google, Shell Style Guide" . Получено 20 января 2025 г. .
Ссылки
^ "Index of /gnu/bash" . Получено 4 декабря 2024 г. .
^ Проект GNU . "Файл README". Архивировано из оригинала 26 апреля 2019 г. Получено 16 апреля 2014 г. Bash — это свободное программное обеспечение, распространяемое в соответствии с условиями Стандартной общественной лицензии [GNU], опубликованной Free Software Foundation, версии 3 Лицензии (или любой более поздней версии).
^ "bash-1.11". oldlinux.org . Архивировано из оригинала 15 октября 2021 г. . Получено 9 июня 2021 г. . См. test.c для GPL-2.0-или-более поздней версии
^ ab "BashFAQ/061 - Greg's Wiki". mywiki.wooledge.org . Архивировано из оригинала 2 марта 2021 г. . Получено 1 марта 2021 г. .
^
"bash-1.05.tar". oldlinux.org .
«Есть ли способ загрузить предположительно первоначальный исходный код bash bash-0.99?». unix.stackexchange.com .
^
Ричард Столлман (12 ноября 2010 г.). «О проекте GNU». Free Software Foundation . Архивировано из оригинала 24 апреля 2011 г. Получено 13 марта 2011 г.«Bourne Again Shell» — это игра слов с названием Bourne Shell , которое было обычной оболочкой в Unix.
Gattol, Markus (13 марта 2011 г.), Bourne-again Shell, архивировано из оригинала 9 марта 2011 г. , извлечено 13 марта 2011 г. Название представляет собой игру слов на названии оболочки Bourne (sh), ранней и важной оболочки Unix, написанной Стивеном Борном и распространявшейся с версией 7 Unix около 1978 года, и концепции «рождения заново».
^ "Bourne shell". ibm.com . Получено 19 мая 2024 г. Bourne shell — это интерактивный командный интерпретатор и командный язык программирования.
^ ab Brian Fox (переслал Leonard H. Tower Jr.) (8 июня 1989 г.). "Bash находится в стадии бета-релиза!". Группа новостей : gnu.announce. Архивировано из оригинала 4 мая 2013 г. Получено 28 октября 2010 г.
^
«GNU in a Nutshell». gnu.org . Получено 19 мая 2024 г. Конечная цель — предоставить свободное программное обеспечение для выполнения всех задач, которые хотят выполнять пользователи компьютеров, и таким образом оставить проприетарное программное обеспечение в прошлом.
«Free Software Foundation — совместная работа ради свободного программного обеспечения — Главная страница». fsf.org . Получено 19 мая 2024 г. Free Software Foundation (FSF) — некоммерческая организация с всемирной миссией по содействию свободе пользователей компьютеров.
"Программное обеспечение GNU". gnu.org . Получено 19 мая 2024 г. GNU — это операционная система, которая на 100% является свободным программным обеспечением.
"GNU's Bulletin, vol. 1 no. 7, June, 1989 :: GNU's Who". gnu.org . Получено 19 мая 2024 . Брайан Фокс завершил версию sh от GNU, названную BASH, `Bourne Again SHell'.
↑ Гамильтон, Наоми (30 мая 2008 г.), «Языки программирования от А до Я: оболочка BASH/Bourne-Again», Computerworld : 2, заархивировано из оригинала 6 июля 2011 г. , извлечено 21 марта 2011 г. Когда Ричард Столлман решил создать полную замену для тогда еще обремененных систем Unix, он знал, что в конечном итоге ему придется иметь замены для всех распространенных утилит, особенно стандартной оболочки, и эти замены должны будут иметь приемлемое лицензирование. ПРИМЕЧАНИЕ: Исходная ссылка computerworld.com.au не работает: см. также копии исходного материала на
readthedocs.io,
computerworld.com.au и
Университет Южной Каролины.
^ Торвальдс, Линус Бенедикт (август 1991 г.). "comp.os.minix" . Получено 6 сентября 2009 г. В настоящее время я портировал bash(1.08) и gcc(1.40), и, похоже, все работает.
^ "Bash FAQ, версия 4.14". Архивировано из оригинала 1 сентября 2018 г. Получено 9 апреля 2016 г.
^ abcdefgh {{ cite web | date = 09 декабря 2011 г. | title = Эволюция оболочек в Linux | url = https://developer.ibm.com/tutorials/l-linux-shells/
^ Луи Пузен (25 ноября 2000 г.). «Происхождение оболочки».
^ «Что означают некоторые команды с непонятными названиями в Unix?». Университет Индианы. 5 февраля 2009 г.
^ "Вики Браун, Биография". O'Reilly Media.
^ «SHELL, глобальный инструмент для вызова и объединения процедур в системе» (PDF) .
^ абв
"BSDCan 2015, Техническая конференция BSD" . Получено 20 января 2025 г.
Стивен Р. Борн (12 июня 2015 г.). "Early days of Unix and design of sh" (PDF) . Получено 20 января 2025 г. .
^ Эдсгер В. Дейкстра (27 января 1975 г.). «Охраняемые команды, неопределенность и формальный вывод программ» (PDF) . Получено 20 января 2025 г.«Защищенная команда» — список операторов, которому предшествует логическое выражение: только если это логическое выражение изначально истинно, список операторов может быть выполнен.
^ Мультицианы, Unix
^ История Multics, информационный сегмент на exec_com
^ https://v6sh.org/ История V6 Sh
^ NIST, ASCII публикация, PDF c1977
^ "Установка новых пакетов GNU". Архивировано из оригинала 3 октября 2020 г. Получено 4 сентября 2020 г.
^ abc Влияние POSIX
^ Usenix ';login:' февраль 2007 г.
↑ Брайан Фокс (29 августа 1996 г.), shell.c, Free Software Foundation , архивировано из оригинала 28 сентября 2018 г. , извлечено 1 ноября 2010 г. , дата рождения: воскресенье, 10 января 1988 г. Первоначальный автор: Брайан Фокс
^ ab Richard Stallman (переслано с комментариями Chet Ramey) (10 февраля 1988 г.). "GNU + BSD = ?". Группа новостей : comp.unix.questions. Usenet: 2362@mandrill.CWRU.Edu. Архивировано из оригинала 28 декабря 2021 г. Получено 28 декабря 2021 г. В течение полутора лет оболочка GNU была "почти готова". Автор неоднократно давал обещания предоставить то, что он сделал, и никогда их не выполнял. Наконец, я больше не мог верить, что он когда-либо что-либо предоставит. Поэтому сотрудник Фонда Брайан Фокс теперь реализует имитацию оболочки Bourne.
^ Ричард Столлман (3 октября 2010 г.). "О проекте GNU". Free Software Foundation . Архивировано из оригинала 24 апреля 2011 г. Получено 21 марта 2011 г. Сотрудники Free Software Foundation написали и поддерживают ряд пакетов программного обеспечения GNU. Два наиболее примечательных из них — библиотека C и оболочка. ... Мы финансировали разработку этих программ, потому что проект GNU был не просто инструментами или средой разработки. Нашей целью была полноценная операционная система, и эти программы были необходимы для этой цели.
^ stallman.org POSIX
^ ab POSIX Backgrounder
^ Mascheck, варианты ясеня
^ Лен (g...@prep.ai.mit.edu) (20 апреля 1993 г.). «Бюллетень GNU, январь 1993 г.». Группа новостей : gnu.announce. Usenet: gnusenet930421bulletin@prep.ai.mit.edu. Архивировано из оригинала 2 марта 2021 года . Проверено 28 октября 2010 г.
^ Ramey, Chet (1 августа 1994 г.). "Bash - оболочка GNU (размышления и извлеченные уроки)". Linux Journal . Архивировано из оригинала 5 декабря 2008 г. Получено 13 ноября 2008 г.
↑ Чет Рэми (31 октября 2010 г.), интервью «Dates in your Computerworld», архивировано из оригинала 20 июля 2012 г. , извлечено 31 октября 2010 г.
^
Гамильтон, Наоми (30 марта 2008 г.). «Языки программирования от А до Я: BASH/Bourne-Again Shell». Computerworld . Архивировано из оригинала 8 ноября 2016 г. . Получено 1 марта 2022 г. .
Ramey, Chet (20 апреля 2021 г.). "GNU Bourne-Again Shell". Службы технологической инфраструктуры . Case Western Reserve University . Получено 1 марта 2022 г.
Чет Рэми (12 июня 1989 г.). "Исправления и улучшения Bash 0.99". Группа новостей : gnu.bash.bug. Архивировано из оригинала 10 ноября 2012 г. Получено 1 ноября 2010 г.
Чет Рэми (24 июля 1989 г.). "Некоторые исправления bash-1.02". Группа новостей : gnu.bash.bug. Архивировано из оригинала 10 ноября 2012 г. Получено 30 октября 2010 г.
Брайан Фокс (2 марта 1990 г.). "Доступность bash 1.05". Группа новостей : gnu.bash.bug. Архивировано из оригинала 10 ноября 2012 г. Получено 30 октября 2010 г.
^ Бреснахан, Кристин; Блюм, Ричард (апрель 2015 г.). CompTIA Linux+ Powered by Linux Professional Institute Study Guide: Exam LX0-103 и Exam LX0-104 (3-е изд.). John Wiley & Sons, Inc. стр. 5. ISBN978-1-119-02122-3. Архивировано из оригинала 2 марта 2021 г. . Получено 6 июня 2016 г. . В Linux большинство пользователей запускают bash, поскольку это самая популярная оболочка.
^ Данеш, Арман; Джанг, Майкл (февраль 2006 г.). Мастерство Linux. John Wiley & Sons, Inc. стр. 363. ISBN978-0-7821-5277-7. Архивировано из оригинала 2 марта 2021 г. . Получено 6 июня 2016 г. . Bourne Again Shell (bash) — наиболее распространённая оболочка, устанавливаемая с дистрибутивами Linux.
^ ab Переносимый набор символов
^ abc Debian, Shell
^ "Альтернатива настольному компьютеру". Forbes .
^ "Приложение A: Использование командной строки BeOS". testou.free.fr .
^ ab Единая спецификация UNIX v 3 - Обзор
^ Bug-bash, самое старое письмо на lists.gnu.org: Re: Режим редактирования строк утерян...
^ Bug-bash, Bash-2.05 доступен для FTP
^ Основы администрирования сервера Mac OS S Panther, стр. 189
^ Фостер-Джонсон, Эрик; Уэлч, Джон К.; Андерсон, Мика (апрель 2005 г.). Beginning Shell Scripting. John Wiley & Sons, Inc. стр. 6. ISBN978-0-7645-9791-6. Архивировано из оригинала 2 марта 2021 г. . Получено 6 июня 2016 г. . Bash — безусловно, самая популярная оболочка, которая является оболочкой по умолчанию в системах Linux и Mac OSX.
^ abc POSIX FAQ v 1.18
^ Bug-bash, Bash-3.0 доступен для FTP
^ POSIX-2004
^ Bug-bash, выпущен Bash-3.1
^ Bug-bash, Bash-3.2 доступен для FTP
^ Bug-bash, Bash-4.0 доступен для FTP
^ "Haiku Project объявляет о доступности Haiku R1/Alpha 1". Haiku Project . 14 сентября 2009 г.
^ «Терминал».
^ "Получить хайку!". Проект хайку .
^ Bug-bash, Bash-4.1 доступен для FTP
^ Bug-bash, Bash-4.2 доступен для FTP
^ "Изменения функций пользовательской среды". Oracle. Архивировано из оригинала 12 июня 2018 г. Получено 8 июня 2018 г.
^ POSIX-2013
^ Bug-bash, Bash-4.3 доступен для FTP
^ Митр, CVE-2014-6271
^ Bug-bash, Bash 3.0 Официальный патч 1
^ Windows 10 Insider Preview Сборка 14332
^
"Как установить командную строку оболочки Bash в Windows 10". 28 сентября 2016 г. Архивировано из оригинала 20 ноября 2016 г. Получено 20 ноября 2016 г.
"Отсутствует исходный код — соответствие GPL? · Проблема № 107 · Microsoft/WSL". GitHub . Архивировано из оригинала 24 сентября 2019 г. Получено 8 июля 2016 г.
"GNU Bash". Softpedia . SoftNews. 23 января 2010 г. Архивировано из оригинала 21 октября 2017 г. Получено 9 апреля 2016 г.
^ POSIX-2016
^ "Compatibility Subsystems". Архивировано из оригинала 23 сентября 2020 г. Получено 4 сентября 2020 г.
^ POSIX-2018
^ ab scriptingosx.com, Переход на Zsh
^ "Apple Support - Use zsh as the default shell on your Mac". Архивировано из оригинала 2 декабря 2019 года . Получено 1 июля 2019 года .
^ Уоррен, Том (4 июня 2019 г.). «Apple replaces bash with zsh as the default shell in macOS Catalina». The Verge . Архивировано из оригинала 10 июня 2019 г. . Получено 13 июня 2019 г. .
^ Хьюз, Мэтью (4 июня 2019 г.). «Почему macOS Catalina использует Zsh вместо Bash? Лицензирование». The Next Web . Архивировано из оригинала 31 декабря 2020 г. . Получено 12 января 2021 г. .
^ Доступен релиз Bug-bash, Bash-5.0
^ Kali Linux 2020.4, zsh по умолчанию
^ Доступен релиз Bash-5.1
^ Bug-bash, Bash-5.2 релиз доступен
^ Github: WSL 2.0.0
^ Хоффман, Крис (30 июля 2021 г.). «Как установить подсистему Windows для Linux на Windows 11». How-To Geek . Получено 12 октября 2022 г. .
^ «Среда выполнения команд (справочное руководство Bash)». www.gnu.org .
^ "Brace Expansion (Bash Reference Manual)". www.gnu.org . Архивировано из оригинала 15 марта 2018 г. Получено 10 января 2024 г.
^ «Справочное руководство Bash». | веб-сайт = https://www.gnu.org
^ "Отладка скриптов Bash". tldp.org . Архивировано из оригинала 4 ноября 2018 г. Получено 20 ноября 2018 г.
^ "The Set Builtin (Bash Reference Manual)". www.gnu.org . Получено 10 января 2024 г. .
^ "Bash changes [Bash Hackers Wiki (DEV 20200708T2203)]". wiki-dev.bash-hackers.org . Архивировано из оригинала 23 сентября 2019 . Получено 23 сентября 2019 .
^ "Bourne Shell Builtins (Bash Reference Manual)". www.gnu.org . Получено 10 января 2024 г. .
^ "Bash Reference Manual". www.gnu.org . Архивировано из оригинала 15 сентября 2019 . Получено 15 сентября 2019 .
^ "Working more productly with bash 2.x/3.x". www.caliban.org . Архивировано из оригинала 29 июня 2018 г. . Получено 21 июня 2018 г. .
^ "6.11 Bash POSIX Mode", Справочное руководство GNU Bash, для Bash, версия 4.1, 23 декабря 2009 г., архивировано из оригинала 3 декабря 2010 г. , извлечено 26 октября 2010 г.
^ "Advanced Bash-Scripting Guide". www.tldp.org . Раздел 37.2 (Bash, версия 3). Архивировано из оригинала 5 мая 2017 г. . Получено 5 марта 2017 г. .
^ "Bash, версия 4". tldp.org . Архивировано из оригинала 1 июля 2018 г. Получено 25 июня 2018 г.
^ "Arrays (Bash Reference Manual)". www.gnu.org . Архивировано из оригинала 11 июля 2018 г. Получено 4 июля 2018 г.
^ "macos - Обновление bash до версии 4.0 на OSX". Ask Different . Архивировано из оригинала 25 июня 2018 г. Получено 25 июня 2018 г.
^ "Bash Reference Manual". www.gnu.org . Архивировано из оригинала 15 марта 2018 г. Получено 27 марта 2018 г.
^ ab Mendel Cooper. "Проблемы переносимости". Проект документации Linux . ibiblio.org. Архивировано из оригинала 27 января 2012 г. Получено 26 января 2012 г.
^ ab "10. Файлы". Debian Policy Manual v4.5.0.2 . Архивировано из оригинала 12 мая 2020 . Получено 11 мая 2020 .
^ "Как форматировать дату и время в Linux, MacOS и Bash?". Советы по оболочке! . Архивировано из оригинала 3 июня 2020 г. . Получено 3 июня 2020 г. .
^ "Portable Shell". Autoconf . Архивировано из оригинала 2 марта 2021 г. . Получено 20 января 2020 г. .
^ "Я почти получил редактор и компилятор Linux". Dr. Dobb's . Архивировано из оригинала 2 марта 2021 г. Получено 12 сентября 2020 г. Но практически все скрипты настройки и установки, которые поставляются с программами с открытым исходным кодом, написаны для bash, и если вы хотите понять эти скрипты, вам нужно знать bash.
^ "архивы bug-bash, Re: Документ, в котором задан параметр -v внутри операторов case, является особенным". 20 апреля 2021 г.
^ "Справочное руководство по Bash". tiswww.case.edu .
^ "Working more productly with bash 2.x/3.x". www.caliban.org . Архивировано из оригинала 29 июня 2018 г. . Получено 21 июня 2018 г. .
^ "Index of /gnu/bash". ftp.swin.edu.au . Архивировано из оригинала 8 марта 2020 г. Получено 15 сентября 2019 г.
^ ab "Введение в программируемое завершение". tldp.org . Получено 21 января 2022 г. .
^ "BASH Help - A Bash Tutorial". Hypexr.org. 5 октября 2012 г. Архивировано из оригинала 2 марта 2021 г. Получено 21 июля 2013 г.
^ «Спецификации Open Group Base, выпуск 7, издание 2018 г.». pubs.opengroup.org .
^ "Страница руководства BASH(1)". tiswww.case.edu .
^ ab "Bash - GNU Project - Free Software Foundation". www.gnu.org . Получено 10 января 2024 г. .
^
«GNU Bourne-Again Shell». tiswww.case.edu .
«Часто задаваемые вопросы». tiswww.case.edu .
^ Руководство GNU Bash, 5.2 Переменные Bash: BASHPID
^ Руководство GNU Bash, 5.2 Переменные Bash: BASH_ARGC
^ Руководство GNU Bash, 5.2 Переменные Bash: BASH_ARGV
^ Руководство GNU Bash, 5.2 Переменные Bash: BASH_LINENO
^
Руководство GNU Bash, 5.2 Переменные Bash: BASH_REMATCH
^ Руководство GNU Bash, 5.2 Переменные Bash: BASH_SOURCE
^ Руководство GNU Bash, 5.2 Переменные Bash: BASH_XTRACEFD
^ Руководство GNU Bash, 5.2 Переменные Bash: EPOCHREALTIME
^ Руководство GNU Bash, 5.2 Переменные Bash: FUNCNAME
^ Руководство GNU Bash, 5.2 Переменные Bash: LINENO
^ Руководство GNU Bash, 5.2 Переменные Bash: PIPESTATUS
^ Руководство GNU Bash, 5.2 Переменные Bash: PPID
^ Руководство GNU Bash, 5.2 Переменные Bash: PS4
^
Руководство GNU Bash, 3.5.3 Расширение параметров оболочки
bash(1), Расширение параметров
POSIX 2024, 2.6.2 Расширение параметров
^ Руководство GNU Bash, 3.4.2 Специальные параметры
^ POSIX 2024, 2.5.2 Специальные параметры
^ аб
Руководство по GNU Bash, 4.3.1 Встроенный Set
POSIX 2024, набор
^ abcde bash(1), ВСТРОЕННЫЕ КОМАНДЫ ОБОЛОЧКИ
^ ab Руководство по GNU Bash, 4.1 Встроенные функции Bourne Shell: trap
^ Руководство GNU Bash, 5.2 Переменные Bash
^ bash(1): Переменные оболочки
^ Руководство GNU Bash, 4.3.2 Встроенный Shopt
^
ShellCheck: инструмент анализа скриптов оболочки
Github: проверка оболочки
^ Пакет: devscripts: скрипты, облегчающие жизнь сопровождающему Debian Package
^ Kcov - покрытие кода
^ Отладка с помощью отладчика BASH
^ "[Bashdb-devel] Re: [PATCH] исправление обработки скриптом bashdb каталога tmp"". Документация домашней страницы проекта .
^ Juliana, Cino (10 июня 2017 г.). "Linux bash exit status and how to set exit status in bash - Techolac". Архивировано из оригинала 21 июня 2019 г. Получено 21 июня 2019 г.
^ Лейден, Джон (24 сентября 2014 г.). «Patch Bash NOW: ошибка „Shell Shock“ широко распахнула системы OS X и Linux». The Register . Архивировано из оригинала 16 октября 2014 г. Получено 25 сентября 2014 г.
^ Перлрот, Николь (25 сентября 2014 г.). «Эксперты по безопасности ожидают, что программная ошибка „Shellshock“ в Bash будет значимой». The New York Times . Архивировано из оригинала 5 апреля 2019 г. Получено 25 сентября 2014 г.
^ Сельцер, Ларри (29 сентября 2014 г.). «Shellshock заставляет Heartbleed выглядеть незначительным». ZDNet . Архивировано из оригинала 14 мая 2016 г.
^ Хузаифа Сидхпурвала (24 сентября 2014 г.). «Bash special-crafted environment variables code injection attack». Red Hat . Архивировано из оригинала 25 сентября 2014 г. Получено 25 сентября 2014 г.
^ Шазелас, Стефан (4 октября 2014 г.). "архивы почтовых рассылок oss-sec". Seclists.org . Архивировано из оригинала 6 октября 2014 г. . Получено 4 октября 2014 г. .
^ bashbug(1) Архивировано 2 октября 2018 г. на Wayback Machine , die.net
^ "Linux / Unix Command: bashbug" Архивировано 6 октября 2014 г. на Wayback Machine , apple.com