stringtranslate.com

Bash (оболочка Unix)

Bash , сокращение от Bourne-Again SHell , — это командная программа и язык команд , поддерживаемый Free Software Foundation [2] и впервые разработанный для проекта GNU [3] Брайаном Фоксом . [4] Разработанный как 100% [5] свободное программное обеспечение, альтернативное оболочке Bourne , [6] [7] [8] он был первоначально выпущен в 1989 году. [9] Его название — игра слов, отсылающая как к его предшественнику, оболочке Bourne, [10] так и к концепции возрождения . [11] [12]

С момента своего создания Bash получил широкое распространение и обычно используется в качестве оболочки входа по умолчанию для многочисленных дистрибутивов Linux . Он имеет историческое значение как одна из самых ранних программ, портированных на Linux Линусом Торвальдсом , наряду с компилятором GNU ( GCC ). [13] Он доступен практически во всех современных операционных системах, что делает его универсальным инструментом в различных вычислительных средах.

Как командный процессор , Bash работает в текстовом окне , где пользователи вводят команды для выполнения различных задач. Он также поддерживает выполнение команд из файлов, известных как скрипты оболочки , что облегчает автоматизацию . В соответствии с соглашениями оболочки Unix , Bash включает в себя богатый набор функций. Ключевые слова , синтаксис , динамически определяемые переменные и другие основные функции языка скопированы из оболочки Bourne , sh. Другие функции, например, история , скопированы из оболочки C , csh, и оболочки Korn , ksh. Bash — это POSIX -совместимая оболочка с рядом расширений.

История

Хотя Bash был разработан для UNIX и UNIX-подобных операционных систем, таких как GNU/Linux, [14] он также доступен для Windows, BeOS, [15] [16] и Haiku. [17]

Брайан Фокс начал писать код для Bash 10 января 1988 года [18] после того, как Ричард Столлман был недоволен отсутствием прогресса, достигнутым предыдущим разработчиком. [7] Столлман и FSF посчитали свободную оболочку, которая могла бы запускать существующие скрипты оболочки, настолько стратегически важной для полностью свободной системы, построенной на основе кода BSD и GNU, что это был один из немногих проектов, которые они финансировали сами, а Фокс взялся за эту работу как сотрудник FSF. [7] [19] Фокс выпустил Bash в виде бета-версии, версии .99, 8 июня 1989 года [9] и оставался основным сопровождающим до середины 1992 года [20] и середины 1994 года [21] , когда он был уволен из FSF [22] , и его обязанности были переданы другому раннему участнику, Чету Рэми. [23] [24] [25] [26] [27]

С тех пор Bash стал самой популярной оболочкой среди пользователей Linux, став интерактивной оболочкой по умолчанию в различных дистрибутивах этой операционной системы [28] [29] и в релизах macOS от Apple до Catalina в октябре 2019 года. [30] [31] [32] Bash также был портирован на Microsoft Windows [33] [34] и распространялся с Cygwin и MinGW , на DOS проектом DJGPP , на Novell NetWare , на OpenVMS проектом GNU, [35] на ArcaOS , [36] и на Android через различные приложения эмуляции терминала.

В сентябре 2014 года Стефан Шазелас, специалист по Unix/Linux, [37] обнаружил ошибку безопасности в программе. Ошибка, впервые обнаруженная 24 сентября, была названа Shellshock и ей были присвоены номера CVE - 2014-6271, CVE-2014-6277 и CVE-2014-7169. Ошибка была расценена как серьезная, поскольку CGI- скрипты, использующие Bash, могли быть уязвимы, что позволяло выполнять произвольный код . Ошибка была связана с тем, как Bash передает определения функций подоболочкам через переменные окружения . [38]

Функции

Как командный процессор , Bash работает в текстовом окне , где пользователи вводят команды для выполнения различных задач. Он также поддерживает выполнение команд из файлов, известных как скрипты оболочки , облегчая автоматизацию . В соответствии с соглашениями оболочки Unix , Bash включает в себя богатый набор функций, включая:

Bash также предлагает...

Ключевые слова , синтаксис , динамически определяемые переменные и другие основные функции языка скопированы из sh . Другие функции, например, история , скопированы из csh и ksh .

Синтаксис команд Bash является надмножеством синтаксиса команд оболочки Bourne. Bash поддерживает раскрытие фигурных скобок , [40] завершение командной строки (программируемое завершение), [41] базовую отладку [42] [43] и обработку сигналов (используя trap) начиная с bash 2.05a [44] [45] среди других функций. Bash может выполнять подавляющее большинство сценариев оболочки Bourne без изменений, за исключением сценариев оболочки Bourne, которые сталкиваются с поведением синтаксиса fringe, интерпретируемым по-разному в Bash, или пытаются запустить системную команду, соответствующую более новой встроенной команде Bash, и т. д. Синтаксис команд Bash включает идеи, взятые из оболочки Korn (ksh) и оболочки C (csh), такие как редактирование командной строки, история команд ( historycommand), [46] стек каталогов, переменные $RANDOMи и синтаксис подстановки команд$PPID POSIX .$(...)

Когда пользователь нажимает клавишу Tab в интерактивной командной оболочке, Bash автоматически использует автодополнение командной строки , начиная с бета-версии 2.04, [47] для сопоставления частично набранных имен программ, имен файлов и имен переменных. Система автодополнения командной строки 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. [48]

Bash поддерживает here documents . Начиная с версии 2.05b Bash может перенаправлять стандартный ввод (stdin) из "here string" с помощью <<<оператора .

Bash 3.0 поддерживает внутрипроцессное сопоставление регулярных выражений , используя синтаксис, напоминающий Perl . [49]

В феврале 2009 года [50] Bash 4.0 представил поддержку ассоциативных массивов . [51] Индексы ассоциативных массивов представляют собой строки, подобно AWK или Tcl . [52] Их можно использовать для эмуляции многомерных массивов. Bash 4 также меняет свою лицензию на GPL-3.0-или-более позднюю ; некоторые пользователи подозревают, что это изменение лицензирования является причиной того, что macOS продолжает использовать старые версии. [53] Zsh стал оболочкой по умолчанию в macOS с выпуском macOS Catalina в 2019 году . [54]

Расширение скобок

Расширение скобок, также называемое чередованием, — это функция, скопированная из оболочки 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 позволяют использовать третье целое число для указания приращения.

$ echo { 1 ..10 } 1 2 3 4 5 6 7 8 9 10 $ echo { 01 ..10 } 01 02 03 04 05 06 07 08 09 10 $ echo файл { 1 ..4 } .txt файл1.txt файл2.txt файл3.txt файл4.txt $ echo { a..e } abcde $ echo { 1 ..10..3 } 1 4 7 10 $ echo { a..j..3 } adgj      

Когда раскрытие фигурных скобок сочетается с раскрытием переменной (также известное как раскрытие параметра и подстановка параметра ), раскрытие переменной выполняется после раскрытия фигурных скобок, что в некоторых случаях может потребовать использования evalвстроенной функции, например:

$ start = 1 ; end = 10 $ echo { $start .. $end } # не удается расширить из-за порядка оценки {1..10} $ eval echo { $start .. $end } # происходит расширение переменной, затем оценивается результирующая строка 1 2 3 4 5 6 7 8 9 10      

Скрипты запуска

При запуске Bash выполняет команды из множества dot-файлов . В отличие от скриптов оболочки 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 .

Портативность

Вызов Bash с --posixопцией или указанием set -o posixв скрипте приводит к тому, что Bash очень близко соответствует стандарту POSIX 1003.2 . [55] Скрипты оболочки Bash, предназначенные для переносимости, должны учитывать по крайней мере стандарт оболочки POSIX. Некоторые функции bash, не найденные в POSIX: [55] [56]

Если фрагмент кода использует такую ​​функцию, это называется «башизмом» — проблемой для переносимого использования. Debian checkbashismsи Vidar Holen shellcheckмогут быть использованы для того, чтобы убедиться, что скрипт не содержит этих частей. [58] [59] Список варьируется в зависимости от фактической целевой оболочки: политика Debian допускает некоторые расширения в своих скриптах (как в оболочке dash ), [56] в то время как скрипт, предназначенный для поддержки оболочек Bourne до POSIX, таких как autoconf , еще configureболее ограничен в функциях, которые он может использовать. [60]

Сочетания клавиш

Bash использует GNU Readline для предоставления сочетаний клавиш для редактирования командной строки с использованием сочетаний клавиш по умолчанию ( Emacs ). Vi-связывания можно включить, запустив set -o vi. [61]

Управление процессами (контроль заданий)

Оболочка Bash имеет два режима выполнения команд: пакетный (асинхронный) и параллельный (синхронный).

Для выполнения команд в пакетном режиме (т.е. последовательно) они должны быть разделены символом «;» или на отдельных строках:

команда1 ;  команда2команда3

В этом примере после завершения команды 1 выполняется команда 2, а после завершения команды 2 выполняется команда 3.

Фоновое выполнение команды command1 может быть выполнено с использованием (символа &) в конце команды выполнения, и процесс будет выполнен в фоновом режиме, при этом управление немедленно вернется в оболочку и будет разрешено продолжить выполнение команд.

команда1 & 

Или для одновременного выполнения command1 и command2, их необходимо выполнить в оболочке Bash следующим образом:

команда1 и команда2  

В этом случае команда 1 выполняется в фоновом режиме и символе, немедленно возвращая управление оболочке, которая выполняет команду 2 в активном режиме.

Процесс можно остановить и вернуть управление bash, набрав Ctrl+ z, пока процесс выполняется на переднем плане. [62]

Список всех процессов, как работающих в фоновом режиме, так и остановленных, можно получить, выполнив команду jobs:

$ jobs [1]- Выполнение команды1 и [2]+ Остановленная команда2

В выводе число в скобках относится к идентификатору задания. Знак «плюс» обозначает процесс по умолчанию для bgи fg. Тексты «Running» и «Stopped» относятся к состоянию процесса . Последняя строка — это команда, которая запустила процесс.

Состояние процесса можно изменить с помощью различных команд. fgКоманда выводит процесс на передний план, а bgостановленный процесс запускает в фоновом режиме. bgи fgможет принимать идентификатор задания в качестве первого аргумента, чтобы указать процесс, над которым нужно работать. Без него они используют процесс по умолчанию, обозначенный знаком плюс в выводе jobs. killКоманду можно использовать для преждевременного завершения процесса, отправив ему сигнал . Идентификатор задания должен быть указан после знака процента:

убить  %1

Условное исполнение

Bash предоставляет разделители команд "условного выполнения", которые делают выполнение команды зависимым от кода выхода, установленного предшествующей командой. Например:

cd " $SOMEWHERE " && ./do_something || echo "Произошла ошибка" > & 2       

Где ./do_something выполняется только в том случае, если команда cd (смена каталога) была «успешной» (вернула нулевой код завершения), а команда echo будет выполнена только в том случае, если либо команда cd , либо ./do_something вернет «ошибку» (ненулевой код завершения).

Для всех команд статус выхода сохраняется в специальной переменной $?. Bash также поддерживает и формы условной оценки команд.if ...;then ...;else ...;ficase $VARIABLE in $pattern)...;;$other_pattern)...;; esac

Сообщение об ошибке

Внешняя команда bashbug сообщает об ошибках оболочки Bash. При вызове команды открывается редактор пользователя по умолчанию с формой для заполнения. Форма отправляется по почте разработчикам Bash (или, по желанию, на другие адреса электронной почты). [63] [64]

Программируемое завершение

Bash поддерживает программируемое завершение с помощью встроенных команд complete, compoptи compgen. [65] Эта функция доступна с момента выхода бета-версии 2.04 в 2000 году. [66] [67] Эти команды позволяют реализовать сложную и интеллектуальную спецификацию завершения для команд (т. е. установленных программ), функций, переменных и имен файлов. [68]

Команды completeи compoptдве определяют, как аргументы некоторых доступных команд или опций будут перечислены во входных данных readline . Начиная с версии 5.1 завершение команды или опции обычно активируется нажатием клавиши после ввода ее имени. [68]Tab ↹

Название программы

Название программы — это фигура речи или острота , которая начинается с дани уважения Стивену Борну , создателю одной из программ-оболочек, которые иногда считались вытесненными оболочкой bash. Его имя используется как каламбур на образе родов . С этим каламбуром, как кажется, добавляется намек : возможно, на индуистскую или буддийскую идею реинкарнации ; возможно, на христианскую идиому, известную как «быть рожденным заново »; или, вполне возможно, просто на более абстрактную идею обновления. В то время как многочисленные английские переводы христианского Нового Завета , Книги Иоанна , главы 3, содержат слова «рожденный заново», словарь Merriam-Webster определяет «рожденный заново» как «...человека, который принял обновленное или подтвержденное обязательство ... [69] ». Каким бы ни был исходный пробный камень, в конце концов программа получила название « Облицовка Bourne Again ». [70] [71]

Аббревиатура этого названия — «bash», слово, означающее «ударить с силой». [ 72] В контексте компьютерного программирования «ударить с силой по чему-либо», например по клавиатуре компьютера, можно считать гиперболическим образом некоторого разочарования . Такой образ негативной эмоциональности можно рассматривать как стоящий в прямом сопоставлении с идеей «заново родиться».

Наименование можно считать примером словесной иронии [73] или случайного намёка . [74] Грамматика Bash изначально была основана на грамматиках самых популярных программ оболочки Unix, которые использовались в то время, некоторые из которых считались особенно сложными в использовании или раздражающими в то время. С течением лет разработка bash сделала его грамматику более удобной для пользователя, [75] [76] [77] [78] [79] [80] настолько, что кажется вероятным, что проект bash был нацелен на улучшение его удобства использования. С тех пор bash стал де-факто программой оболочки по умолчанию в большинстве операционных систем Linux и Unix.

Документация

В качестве стандарта, на котором основана bash, можно привести POSIX или IEEE Std 1003.1, [81] и последующие.

Страница руководства Linux [82] [83] призвана стать авторитетным объяснительным документом для понимания того, как bashработает, в то время как руководство GNU иногда считается более удобным для чтения. "Вы также можете найти информацию о Bash, запустив info bash... или просмотрев /usr/share/doc/bash/, /usr/local/share/doc/bash/, или аналогичные каталоги в вашей системе. Краткую сводку можно получить, запустив bash --help. [70] "

В современных Linux-системах информацию о встроенных командах оболочки можно найти, выполнив help, help [built-in name]или man builtinsв командной строке терминала, где установлен bash. Некоторые команды, такие как echo, false, kill, или , в зависимости от вашей системы и локально установленной версии bash, могут ссылаться либо на встроенный файл оболочки, либо на системный двоичный исполняемый файл. Когда происходит одно из этих конфликтов имен команд, bash по умолчанию выполнит заданную командную строку, используя встроенный файл оболочки. Указание абсолютного пути к двоичному исполняемому файлу (т. е. ) является одним из способов обеспечения того, чтобы оболочка использовала системный двоичный файл. Эта проблема конфликта имен также влияет на любые «справочные сводки», просматриваемые с помощью и . Встроенные файлы оболочки и системные двоичные исполняемые файлы с одинаковым именем часто имеют разные параметры.printftesttrue/bin/printfkill --help/bin/kill --help

«У ответственного за проект также есть страница Bash, которая включает в себя часто задаваемые вопросы», [84] [85] [70] этот FAQ актуален для версии bash 5.1 и больше не обновляется.

Уязвимости

Уязвимость безопасности Bash, появившаяся в версии 1.03 (август 1989 г.), [86] получившая название Shellshock , была обнаружена в начале сентября 2014 г. и быстро привела к ряду атак по всему Интернету . [87] [88] [89] Патчи для исправления ошибок были выпущены вскоре после их обнаружения.

Лицензирование

Начиная с версии 4.0: GPL-3.0 или более поздняя [90]

1.11? по 3.2: GPL-2.0 или более поздняя версия [91]

0.99? до 1.05?: GPL-1.0 или более поздняя версия [92] [51] [93]

Версии

Версия также доступна для Windows 10 и Windows 11 через подсистему Windows для Linux . [94] [95] Это также пользовательская оболочка по умолчанию в Solaris 11. [96] Bash также была оболочкой по умолчанию в BeOS , [15] и в версиях Apple macOS от 10.3 (первоначально оболочкой по умолчанию была tcsh ) до 10.15 ( macOS Catalina ), которая изменила оболочку по умолчанию на zsh , [32] хотя Bash остается доступным в качестве альтернативной оболочки. [54]

История релизов

Смотрите также

Ссылки

  1. ^ https://ftp.gnu.org/gnu/bash/. {{cite web}}: Отсутствует или пусто |title=( помощь )
  2. ^ "Free Software Foundation — совместная работа ради свободного программного обеспечения — Главная страница". fsf.org . Получено 19 мая 2024 г. Free Software Foundation (FSF) — некоммерческая организация с всемирной миссией по содействию свободе пользователей компьютеров.
  3. ^ "GNU in a Nutshell". gnu.org . Получено 19 мая 2024 г. Конечная цель — предоставить свободное программное обеспечение для выполнения всех задач, которые хотят выполнять пользователи компьютеров, и таким образом оставить проприетарное программное обеспечение в прошлом.
  4. ^ "GNU's Bulletin, vol. 1 no. 7, June, 1989 :: GNU's Who". gnu.org . Получено 19 мая 2024 . Брайан Фокс завершил версию sh от GNU, названную BASH, `Bourne Again SHell'.
  5. ^ "GNU Software". gnu.org . Получено 19 мая 2024 г. GNU — это операционная система, которая является на 100% свободным программным обеспечением.
  6. ^ "Bourne shell". ibm.com . Получено 19 мая 2024 г. Bourne shell — это интерактивный командный интерпретатор и командный язык программирования.
  7. ^ abc Ричард Столлман (переслано с комментариями Чета Рэми) (10 февраля 1988 г.). "GNU + BSD = ?". Группа новостей : comp.unix.questions. Usenet:  [email protected]. Архивировано из оригинала 28 декабря 2021 г. Получено 28 декабря 2021 г. В течение полутора лет оболочка GNU была "почти готова". Автор неоднократно давал обещания предоставить то, что он сделал, и никогда их не выполнял. Наконец, я больше не мог верить, что он когда-либо что-либо предоставит. Поэтому сотрудник Фонда Брайан Фокс теперь реализует имитацию оболочки Bourne.
  8. Гамильтон, Наоми (30 мая 2008 г.), «Языки программирования от А до Я: оболочка BASH/Bourne-Again», Computerworld : 2, заархивировано из оригинала 6 июля 2011 г. , извлечено 21 марта 2011 г. Когда Ричард Столлман решил создать полную замену для тогда еще обремененных систем Unix, он знал, что в конечном итоге ему придется иметь замены для всех распространенных утилит, особенно стандартной оболочки, и эти замены должны будут иметь приемлемое лицензирование. ПРИМЕЧАНИЕ: Исходная ссылка computerworld.com.au не работает: см. также копии исходного материала на
    • readthedocs.io,
    • computerworld.com.au и
    • Университет Южной Каролины.
  9. ^ ab Brian Fox (переслал Leonard H. Tower Jr.) (8 июня 1989 г.). "Bash находится в стадии бета-релиза!". Группа новостей : gnu.announce. Архивировано из оригинала 4 мая 2013 г. Получено 28 октября 2010 г.
  10. ^ "Я почти получил редактор и компилятор Linux". Dr. Dobb's . Архивировано из оригинала 2 марта 2021 г. Получено 12 сентября 2020 г.
  11. ^ Ричард Столлман (12 ноября 2010 г.). «О проекте GNU». Free Software Foundation . Архивировано из оригинала 24 апреля 2011 г. Получено 13 марта 2011 г. «Bourne Again Shell» — это игра слов с названием Bourne Shell , которое было обычной оболочкой в ​​Unix.
  12. Gattol, Markus (13 марта 2011 г.), Bourne-again Shell, архивировано из оригинала 9 марта 2011 г. , извлечено 13 марта 2011 г. Название представляет собой игру слов на названии оболочки Bourne (sh), ранней и важной оболочки Unix, написанной Стивеном Борном и распространявшейся с версией 7 Unix около 1978 года, и концепции «рождения заново».
  13. ^ Торвальдс, Линус Бенедикт (август 1991 г.). "comp.os.minix" . Получено 6 сентября 2009 г. В настоящее время я портировал bash(1.08) и gcc(1.40), и, похоже, все работает.
  14. ^ "Bash FAQ, версия 4.14". Архивировано из оригинала 1 сентября 2018 г. Получено 9 апреля 2016 г.
  15. ^ ab "Альтернатива настольному компьютеру". Forbes .
  16. ^ "Приложение A: Использование командной строки BeOS". testou.free.fr .
  17. ^ «Терминал».
  18. Брайан Фокс (29 августа 1996 г.), shell.c, Free Software Foundation , архивировано из оригинала 28 сентября 2018 г. , извлечено 1 ноября 2010 г. , дата рождения: воскресенье, 10 января 1988 г. Первоначальный автор: Брайан Фокс
  19. ^ Ричард Столлман (3 октября 2010 г.). "О проекте GNU". Free Software Foundation . Архивировано из оригинала 24 апреля 2011 г. Получено 21 марта 2011 г. Сотрудники Free Software Foundation написали и поддерживают ряд пакетов программного обеспечения GNU. Два наиболее примечательных из них — библиотека C и оболочка. ... Мы финансировали разработку этих программ, потому что проект GNU был не просто инструментами или средой разработки. Нашей целью была полноценная операционная система, и эти программы были необходимы для этой цели.
  20. ^ Лен ([email protected]) (20 апреля 1993 г.). «Бюллетень GNU, январь 1993 г.». Группа новостей : gnu.announce. Usenet:  [email protected]. Архивировано из оригинала 2 марта 2021 года . Проверено 28 октября 2010 г.
  21. ^ Ramey, Chet (1 августа 1994 г.). "Bash - оболочка GNU (размышления и извлеченные уроки)". Linux Journal . Архивировано из оригинала 5 декабря 2008 г. Получено 13 ноября 2008 г.
  22. Чет Рэми (31 октября 2010 г.), интервью «Dates in your Computerworld», архивировано из оригинала 20 июля 2012 г. , извлечено 31 октября 2010 г.
  23. Гамильтон, Наоми (30 марта 2008 г.). «Языки программирования от А до Я: BASH/Bourne-Again Shell». Computerworld . Архивировано из оригинала 8 ноября 2016 г. Получено 1 марта 2022 г.
  24. ^ Ramey, Chet (20 апреля 2021 г.). "GNU Bourne-Again Shell". Technology Infrastructure Services . Case Western Reserve University . Получено 1 марта 2022 г.
  25. Чет Рэми (12 июня 1989 г.). "Исправления и улучшения Bash 0.99". Группа новостей : gnu.bash.bug. Архивировано из оригинала 10 ноября 2012 г. Получено 1 ноября 2010 г.
  26. Чет Рэми (24 июля 1989 г.). "Некоторые исправления bash-1.02". Группа новостей : gnu.bash.bug. Архивировано из оригинала 10 ноября 2012 г. Получено 30 октября 2010 г.
  27. Брайан Фокс (2 марта 1990 г.). «Доступность bash 1.05». Группа новостей : gnu.bash.bug. Архивировано из оригинала 10 ноября 2012 г. Получено 30 октября 2010 г.
  28. ^ Бреснахан, Кристин; Блюм, Ричард (апрель 2015 г.). CompTIA Linux+ Powered by Linux Professional Institute Study Guide: Exam LX0-103 и Exam LX0-104 (3-е изд.). John Wiley & Sons, Inc. стр. 5. ISBN  978-1-119-02122-3. Архивировано из оригинала 2 марта 2021 г. . Получено 6 июня 2016 г. . В Linux большинство пользователей запускают bash, поскольку это самая популярная оболочка.
  29. ^ Данеш, Арман; Джанг, Майкл (февраль 2006 г.). Мастерство Linux. John Wiley & Sons, Inc. стр. 363. ISBN  978-0-7821-5277-7. Архивировано из оригинала 2 марта 2021 г. . Получено 6 июня 2016 г. . Bourne Again Shell (bash) — наиболее распространённая оболочка, устанавливаемая с дистрибутивами Linux.
  30. ^ Фостер-Джонсон, Эрик; Уэлч, Джон К.; Андерсон, Мика (апрель 2005 г.). Beginning Shell Scripting. John Wiley & Sons, Inc. стр. 6. ISBN  978-0-7645-9791-6. Архивировано из оригинала 2 марта 2021 г. . Получено 6 июня 2016 г. . Bash — безусловно, самая популярная оболочка, которая является оболочкой по умолчанию в системах Linux и Mac OSX.
  31. ^ "Используйте zsh как оболочку по умолчанию на вашем Mac - Поддержка Apple". Архивировано из оригинала 2 декабря 2019 года . Получено 1 июля 2019 года .
  32. ^ ab Warren, Tom (4 июня 2019 г.). «Apple replaces bash with zsh as the default shell in macOS Catalina». The Verge . Архивировано из оригинала 10 июня 2019 г. . Получено 13 июня 2019 г. .
  33. ^ "Отсутствует исходный код - соответствие GPL? · Проблема № 107 · Microsoft/WSL". GitHub . Архивировано из оригинала 24 сентября 2019 г. Получено 8 июля 2016 г.
  34. ^ "GNU Bash". Softpedia . SoftNews. 23 января 2010 г. Архивировано из оригинала 21 октября 2017 г. Получено 9 апреля 2016 г.
  35. ^ "Установка новых пакетов GNU". Архивировано из оригинала 3 октября 2020 г. Получено 4 сентября 2020 г.
  36. ^ "Compatibility Subsystems". Архивировано из оригинала 23 сентября 2020 г. Получено 4 сентября 2020 г.
  37. ^ Juliana, Cino (10 июня 2017 г.). "Linux bash exit status and how to set exit status in bash - Techolac". Архивировано из оригинала 21 июня 2019 г. Получено 21 июня 2019 г.
  38. ^ Хузаифа Сидхпурвала (24 сентября 2014 г.). «Bash special-crafted environment variables code injection attack». Red Hat . Архивировано из оригинала 25 сентября 2014 г. Получено 25 сентября 2014 г.
  39. ^ «Среда выполнения команд (справочное руководство Bash)». www.gnu.org .
  40. ^ "Brace Expansion (Bash Reference Manual)". www.gnu.org . Архивировано из оригинала 15 марта 2018 г. Получено 10 января 2024 г.
  41. ^ {{ cite web bash.html#Programmable-Completion | title = Справочное руководство Bash | url = https://www.gnu.org/software/bash/manual/ }} | website = www.gnu.org
  42. ^ "Отладка скриптов Bash". tldp.org . Архивировано из оригинала 4 ноября 2018 г. Получено 20 ноября 2018 г.
  43. ^ "The Set Builtin (Bash Reference Manual)". www.gnu.org . Получено 10 января 2024 г. .
  44. ^ "Bash changes [Bash Hackers Wiki (DEV 20200708T2203)]". wiki-dev.bash-hackers.org . Архивировано из оригинала 23 сентября 2019 . Получено 23 сентября 2019 .
  45. ^ "Bourne Shell Builtins (Bash Reference Manual)". www.gnu.org . Получено 10 января 2024 г. .
  46. ^ "Bash Reference Manual". www.gnu.org . Архивировано из оригинала 15 сентября 2019 . Получено 15 сентября 2019 .
  47. ^ "Working more productly with bash 2.x/3.x". www.caliban.org . Архивировано из оригинала 29 июня 2018 г. . Получено 21 июня 2018 г. .
  48. ^ "6.11 Bash POSIX Mode", Справочное руководство GNU Bash, для Bash, версия 4.1, 23 декабря 2009 г., архивировано из оригинала 3 декабря 2010 г. , извлечено 26 октября 2010 г.
  49. ^ "Advanced Bash-Scripting Guide". www.tldp.org . Раздел 37.2 (Bash, версия 3). Архивировано из оригинала 5 мая 2017 г. . Получено 5 марта 2017 г. .
  50. ^ "Bash, версия 4". tldp.org . Архивировано из оригинала 1 июля 2018 г. Получено 25 июня 2018 г.
  51. ^ abc "BashFAQ/061 - Greg's Wiki". mywiki.wooledge.org . Архивировано из оригинала 2 марта 2021 г. . Получено 1 марта 2021 г. .
  52. ^ "Arrays (Bash Reference Manual)". www.gnu.org . Архивировано из оригинала 11 июля 2018 г. Получено 4 июля 2018 г.
  53. ^ "macos - Обновление bash до версии 4.0 на OSX". Ask Different . Архивировано из оригинала 25 июня 2018 г. Получено 25 июня 2018 г.
  54. ^ ab Hughes, Matthew (4 июня 2019 г.). «Почему macOS Catalina использует Zsh вместо Bash? Лицензирование». The Next Web . Архивировано из оригинала 31 декабря 2020 г. . Получено 12 января 2021 г. .
  55. ^ ab Mendel Cooper. "Проблемы переносимости". Проект документации Linux . ibiblio.org. Архивировано из оригинала 27 января 2012 г. Получено 26 января 2012 г.
  56. ^ ab "10. Файлы". Debian Policy Manual v4.5.0.2 . Архивировано из оригинала 12 мая 2020 . Получено 11 мая 2020 .
  57. ^ "Как форматировать дату и время в Linux, MacOS и Bash?". Советы по оболочке! . Архивировано из оригинала 3 июня 2020 г. . Получено 3 июня 2020 г. .
  58. ^ checkbashisms(1)  –  Руководство по основным командам Linux
  59. ^ shellcheck(1)  –  Руководство по основным командам Linux
  60. ^ "Portable Shell". Autoconf . Архивировано из оригинала 2 марта 2021 г. . Получено 20 января 2020 г. .
  61. ^ "BASH Help - A Bash Tutorial". Hypexr.org. 5 октября 2012 г. Архивировано из оригинала 2 марта 2021 г. Получено 21 июля 2013 г.
  62. ^ "Bash Reference Manual". www.gnu.org . Архивировано из оригинала 15 марта 2018 г. Получено 27 марта 2018 г.
  63. ^ bashbug(1) Архивировано 2 октября 2018 г. на Wayback Machine , die.net
  64. ^ "Linux / Unix Command: bashbug" Архивировано 6 октября 2014 г. на Wayback Machine , apple.com
  65. ^ "Справочное руководство по Bash". tiswww.case.edu .
  66. ^ "Working more productly with bash 2.x/3.x". www.caliban.org . Архивировано из оригинала 29 июня 2018 г. . Получено 21 июня 2018 г. .
  67. ^ "Index of /gnu/bash". ftp.swin.edu.au . Архивировано из оригинала 8 марта 2020 г. Получено 15 сентября 2019 г.
  68. ^ ab "Введение в программируемое завершение". tldp.org . Получено 21 января 2022 г. .
  69. ^ "Определение BORN-AGAIN". www.merriam-webster.com . Получено 9 января 2024 г. .
  70. ^ abc "Bash - GNU Project - Free Software Foundation". www.gnu.org . Получено 10 января 2024 г. .
  71. ^ "Что такое Bash? (Справочное руководство по Bash)". www.gnu.org . Получено 9 января 2024 г. .
  72. ^ «Определение BASH». www.merriam-webster.com . 5 января 2024 г. Получено 9 января 2024 г.
  73. ^ «Определение иронии, общие примеры и значение в литературе». 31 августа 2020 г.
  74. ^ «Иннуминозность — примеры и определение иннуминозности». 2 января 2014 г.
  75. ^ "BashGuide/Arrays - Greg's Wiki". mywiki.wooledge.org . Получено 10 января 2024 г. .
  76. ^ "CommandSubstitution - Greg's Wiki". mywiki.wooledge.org . Получено 10 января 2024 г. .
  77. ^ "BashGuide/TestsAndConditionals - Вики Грега". mywiki.wooledge.org . Получено 10 января 2024 г. .
  78. ^ "ИЗМЕНЕНИЯ - bash.git - bash". git.savannah.gnu.org . Получено 10 января 2024 г. .
  79. ^ "Bash changes [Bash Hackers Wiki]". 14 февраля 2021 г. Архивировано из оригинала 14 февраля 2021 г. Получено 10 января 2024 г.
  80. ^ "Устаревший и не рекомендуемый синтаксис [Bash Hackers Wiki]". 11 февраля 2021 г. Архивировано из оригинала 11 февраля 2021 г. Получено 10 января 2024 г.
  81. ^ «Спецификации Open Group Base, выпуск 7, издание 2018 г.». pubs.opengroup.org .
  82. ^ "Страница руководства BASH(1)". tiswww.case.edu .
  83. ^ "bash.0\doc - bash.git - bash". git.savannah.gnu.org .
  84. ^ "GNU Bourne-Again Shell". tiswww.case.edu .
  85. ^ «Часто задаваемые вопросы».
  86. ^ Шазелас, Стефан (4 октября 2014 г.). "архивы почтовых рассылок oss-sec". Seclists.org . Архивировано из оригинала 6 октября 2014 г. . Получено 4 октября 2014 г. .
  87. ^ Лейден, Джон (24 сентября 2014 г.). «Patch Bash NOW: ошибка „Shell Shock“ широко распахнула системы OS X и Linux». The Register . Архивировано из оригинала 16 октября 2014 г. Получено 25 сентября 2014 г.
  88. ^ Перлрот, Николь (25 сентября 2014 г.). «Эксперты по безопасности ожидают, что программная ошибка „Shellshock“ в Bash будет значимой». The New York Times . Архивировано из оригинала 5 апреля 2019 г. Получено 25 сентября 2014 г.
  89. ^ Сельцер, Ларри (29 сентября 2014 г.). «Shellshock заставляет Heartbleed выглядеть незначительным». ZDNet . Архивировано из оригинала 14 мая 2016 г.
  90. ^ Проект GNU . "Файл README". Архивировано из оригинала 26 апреля 2019 г. Получено 16 апреля 2014 г. Bash — это свободное программное обеспечение, распространяемое в соответствии с условиями Стандартной общественной лицензии [GNU], опубликованной Free Software Foundation, версии 3 Лицензии (или любой более поздней версии).
  91. ^ "bash-1.11". oldlinux.org . Архивировано из оригинала 15 октября 2021 г. . Получено 9 июня 2021 г. . См. test.c для GPL-2.0-или-более поздней версии
  92. ^ "bash-1.05.tar". сайт oldlinux.org .
  93. ^ "Есть ли способ загрузить предположительно первоначальный исходный код bash bash-0.99?". unix.stackexchange.com .
  94. ^ "Как установить командную строку оболочки Bash в Windows 10". 28 сентября 2016 г. Архивировано из оригинала 20 ноября 2016 г. Получено 20 ноября 2016 г.
  95. ^ Хоффман, Крис (30 июля 2021 г.). «Как установить подсистему Windows для Linux на Windows 11». How-To Geek . Получено 12 октября 2022 г. .
  96. ^ "Изменения функций пользовательской среды". Oracle. Архивировано из оригинала 12 июня 2018 г. Получено 8 июня 2018 г.
  97. ^ "github version history NEWS v5.0". GitHub . Архивировано из оригинала 4 мая 2022 . Получено 1 марта 2021 .
  98. ^ "Bash changes [Bash Hackers Wiki]". Архивировано из оригинала 18 марта 2020 г. Получено 25 ноября 2019 г.
  99. ^ "Bash-5.0 release available". lists.gnu.org . Архивировано из оригинала 8 ноября 2020 г. . Получено 1 марта 2021 г. .

Дальнейшее чтение